|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!5 B& \0 ^; y H+ |4 \
这几天我在忙着编一个问题,我用了一种方法编出来!2 A, i4 W. m+ g( d* m! V
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!2 X) {, z% l; ~6 U# k& s9 T
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 6 H4 p, {8 n- u9 X
2 ?6 q- u: u7 c) l" w
1 K" u# y5 h4 z, z9 l 题目6 B( k# q# H4 W0 z
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。8 q. O' k2 M1 g3 q. n3 y* |4 v4 L/ ?
第一种方法:利用循环链表
& ?! _0 v9 I' N/ ^#include<stdio.h>
U* F: B" q8 U/ J# i' H#include<malloc.h>) g( s$ w! a- @/ F& A
#define M 8 //共有8只猴子
) _/ O5 M9 W* J0 J$ p#define N 3 //数到3只时退出第三只* K4 A2 ?8 w" T5 I3 i
typedef struct monkey
5 d- |' {/ }# V" e ?{int number;
0 F: m7 G1 f" ?: L- _, aint flag;0 J1 y* W/ |/ ^* k
struct monkey* next;
' }2 y6 s7 A2 V; L+ x}MONKEY;- }; U8 c: N2 w" B! P! w+ M! @( [
main()
! W+ a! m6 X, L/ }{ MONKEY *head=NULL,*p,*s;
% A4 L& b6 Y. E$ O. F6 _8 j int i,sum=0,count=0;
" R4 v8 m, W1 q1 \5 B# _' M clrscr(); //清屏
; R# Y1 ~" g$ P3 e p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存4 B6 x5 t) k5 o
p->number=1;p->flag=1;! T, C$ b5 x2 X, t7 z
p->next=head;
8 q+ c3 _7 ~" z5 N head=p;
5 u! A$ r+ D; W, W for(i=2;i<=M;i++)
: \' s J3 D, }0 e0 p3 v { s=(MONKEY *)malloc(sizeof(MONKEY));0 @: o: [: A: R7 L K: \, v1 F
s->number=i;s->flag=1;
- Q& ?# E- F. a/ C5 z( N/ ~( D' h s->next=head;
. L0 P2 x) k" G: u! ` p->next=s;p=p->next;
' m$ K: O# F ^0 I }8 I4 Z4 E# m7 ?+ _8 n# s$ _
p=head;, t: y x8 S6 x3 R
for(;;)
/ L/ H& _9 \6 {+ l7 U {if(p->flag==1)& i) y- Q9 d# r3 w4 C4 \8 A
count++;
' U* N. O1 f; [0 O/ L4 K if(count==N)
; w8 D, ^3 Q- E {p->flag=0;6 e1 {+ Y; I2 @8 H# j
count=0;6 {" L* Q! @/ K; s+ p$ B# P
sum++;}
( h8 U5 R# S/ g8 Y: I9 F& ^! z if(sum==M-1)6 z4 R% U$ U7 P% [
break;' D9 v# t7 z0 {* M/ A
p=p->next;) \( [. E2 ^5 N" i
}5 m s% l: b/ [: ~2 s: u
p=( w0 ^7 w, O3 @, w+ z! N3 O
head;
6 U2 o' D4 c- u! G6 p5 c. b+ Y for(i=1;i<=M;i++)
' ]: I2 R9 \2 N" u { if(p->flag==1)5 I2 ]7 b& c/ d& s
printf("\t%d",p->number);9 v. L8 o$ S: {! \- Z- B; q8 A( t
p=p->next;/ F w' O; C1 K; L! H5 _. _& j2 o
}; S6 \: u- P1 i7 W
& [9 W. d. b5 y2 B; M5 ~& }
B" _$ i1 B0 _* G# @3 y( `! s# |: F0 l3 ]( b
}
) O6 @4 ~# F% z5 ^6 P- V$ ~第二种方法:数组& H, ]$ I* X2 P
#include<stdio.h>% |" S/ _+ U7 K5 t- e6 X
#define M 8
1 x/ J; ]$ V* Ostruct monkey, n% w0 A& a$ N
{int number;
. s+ R. d! P& w1 \! nint nextp;( d9 Q$ Q- {. A5 [- z& A% b; }
}link[M+1];
- i4 E! ]2 e$ p6 E. Z4 t- c
7 K) O) ?" K# gvoid main()
4 t# r* Z' ]; u+ q6 r' A3 ?{int i,count,h;) X) _. ^* i; B' X6 _& T
for(i=1;i<=M;i++)& G# B* o% l5 q! G4 U
{ if(i==M)
. L1 ]- \% q, C7 F6 t link[i].nextp=1;
+ }% X+ w+ F7 g( Q, M( [( r) { else
+ a8 L; c2 G! m8 @" x% a# ] link[i].nextp=i+1;
4 z5 ]& B* a; v: z7 F. \ link[i].number=i;
. ^, a9 \/ [* c9 D; G}# [; g- k% O, x$ y" D( _6 A. ^
printf("\n");9 a* C( Q. @5 I+ g0 H$ Q5 S; D6 U
count=0;& R$ n7 \! D2 ~* ]' O% @
h=M;6 t* Z3 b9 T7 E5 R; ^. d
printf("依次退出的猴子: \n");
" Q y6 ~: U- \5 vwhile(count<M-1)
" d/ v0 I: ^* _' b. N. S W{i=0;
. [0 Y& w: _5 U& d- o# ~while(i!=3)3 }# D* y* c; S. `4 N+ \
{ h=link[h].nextp;
" n& d$ G9 u/ z if(link[h].number)/ x- h @4 f5 S7 U k
i++;}
/ x& J0 c- |. Q( s/ z7 [6 e4 A0 d( j1 g9 @2 l5 m. E1 R
printf("%4d",link[h].number);2 ?% F7 B- c" o. _ l, c A
link[h].number=0;2 v! k% ^2 z) T: P/ X+ U
count++;/ }8 }, u" J' B5 e" W& K
}
, ^( I: F2 ~ @8 r5 f6 B0 J' q# j* Q# C2 O. n
printf("\n大王是:");# K9 B0 c y/ ~4 b
for(i=1;i<=M;i++)
! r$ x( b5 e9 f& T/ w6 { if(link[i].number)
& {! J2 ^% u3 z8 M5 p2 a printf("%3d\n",link[i].number);
0 {" ?; g" J/ U
4 d9 E! M1 _+ J' ~' p" E: U
3 c. ?- b3 O2 b/ ~* x8 T! [2 o} & @8 n9 p( a, _) e
第三种是普通方法for循环
# }7 S3 e+ \+ \! M7 j6 x' _#include<stdio.h>5 m" k$ p1 N* _4 c# t2 X- X
void main()% C& p2 h s; ~) d [1 \
{ int i,k,m,n,num[50],q,*p;. s; q4 `. Q* J# i+ `. `1 D
clrscr();
: b% r1 z- ^$ t9 a; b- h printf("input number of person: n=");& @9 F* _8 k1 `- t! `1 L2 w8 Y
scanf("%d",&n);
0 P1 ?# J k( r! O. b8 @printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
' f" k9 ?. T3 g) x8 f scanf("%d",&q);' U z- @! \' q6 r+ r/ E
p=num;
m4 A/ j2 n2 C" b k( X" X3 g for(i=0;i<n;i++)
+ ^" e: n: ?0 i7 e *(p+i)=i+1;
4 B! e4 v* @& c$ ?! i) n' | i=0;
8 W8 u: F* Z! V! I" i( H k=0;- t1 u' C2 y5 a( v7 {* L( [7 }9 _
m=0;
3 _; S, ]2 i6 ? while(m<n-1)+ y5 {* I8 t% J
{if(*(p+i)!=0) k++;
( F: ^! W: A3 O2 C0 T% _: T if(k==q)
4 P9 X, y# Z% f2 O1 ] { *(p+i)=0;# r* _; d6 E& l5 r8 d* S6 T6 y; Y6 j
k=0;
: s5 h, i" U4 D) w+ h3 t m++;
$ j8 p0 `% J4 K& L4 a }) f' y2 C& h0 |
i++;
$ Q9 {5 L8 P* B( y# b& u* a if(i==n)i=0;0 G9 W- {9 [7 I! u1 F. M$ B
}* J8 c% r+ Z7 |) d- `* _
while(*p==0)p++;
, y5 E( j: a# x/ d f6 S# R$ r printf("The last one is NO:%d\n",*p);
+ N) o+ a: V% g" ?0 k. u _) e3 D9 O getch();- f" P# G* B* F: w% L4 ]
' r5 b# Q& `4 V( g
} |
|