|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
) K$ ~' o' C& c: M) r- j% W这几天我在忙着编一个问题,我用了一种方法编出来!* b: I9 {; J/ t6 Q, s4 K
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
, y( u0 _6 Y' T* v, r注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 7 @# o+ D* ~( u2 A
' c2 ^ Z* Y4 M0 ?5 ^ v
5 ]# {( |: q: o* g- y; u* a3 I 题目* ^" K9 h4 R4 K8 l% J6 W% o' W
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。5 I! P/ x$ D, J/ T& ?2 g; `
第一种方法:利用循环链表9 n5 ?/ ]2 }6 i
#include<stdio.h>
# m" h, F( r) y1 n# r#include<malloc.h>
7 r# l6 [! Y* ^) _) \* a" y: s! b#define M 8 //共有8只猴子9 {0 V( i3 ^6 L& ]# t! f! f% ]
#define N 3 //数到3只时退出第三只
, q5 J5 W, Y% B: ~* g- Ytypedef struct monkey; ?5 ~( H; g9 F7 G Y4 K5 g" }/ `
{int number;! i' O0 v. B/ A0 e( v B* n
int flag;% J9 r: b5 C: M' D3 m2 D
struct monkey* next;7 q# W9 `7 r( h& _. B
}MONKEY;
2 ?8 X2 U$ ?. m# }( wmain()5 l5 P. H, w' \+ \! S# n
{ MONKEY *head=NULL,*p,*s;% R( N0 ]# l$ u1 r9 g: P; M
int i,sum=0,count=0;
& } c3 ~7 K5 ^0 m clrscr(); //清屏
+ [& P' \! d' v# z" s! u p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
P: j" v7 {# r6 c5 E p->number=1;p->flag=1;, k( N# G' v. D8 }
p->next=head;
& m8 Q E" D" r7 s' i head=p;
2 N" {- z5 f5 ?, Y for(i=2;i<=M;i++)7 g8 e; ?7 B" |" F9 L7 y
{ s=(MONKEY *)malloc(sizeof(MONKEY));0 g1 z! _; \. s8 N
s->number=i;s->flag=1;& |) N) t3 G+ V, Z) ~
s->next=head;' v5 K/ B( K2 Y
p->next=s;p=p->next;
( I$ T+ y( q: E. I3 y8 P c }
* z6 n- B3 @( U" r6 c5 n p=head;
: _7 Y9 T- f) `% m2 \ for(;;)$ F" f, G9 O# v3 }$ N5 W0 ?. v6 j
{if(p->flag==1)
1 M& N. s3 `* O% E+ U! y( |4 s) z! B count++;
/ C+ n# T/ P/ ]+ X if(count==N)5 ]- `- A2 Y3 d! W9 i- Q( T0 c
{p->flag=0;, V0 L$ w! `# m- s
count=0;5 M2 l% h, _0 j7 t5 j! x7 J$ A
sum++;}1 x5 L! f6 R; C0 I! s) E, l% `
if(sum==M-1); F" ]& c& B3 V: q8 E8 i; ~
break;
7 j9 q% u* f; D: z p=p->next;( V2 M8 Q/ C# z" j! \
}( A W' [" h- A( Z9 g2 t0 n8 @ }
p=1 C) V7 u1 f4 _. Q
head;8 a+ T/ C6 p9 }; j; J% x
for(i=1;i<=M;i++)' w) P+ w3 N2 k! u
{ if(p->flag==1)6 @; L0 \4 e G$ h
printf("\t%d",p->number);( U% ^) o2 g" z6 u0 S: H
p=p->next;
7 A2 ^" ? m' K7 ?+ z }* p0 J' W% U# r3 L' X
! @, R- W6 J0 n; h; ` Y, r
2 p J/ I5 ]6 ?* z
^+ R; U# g' x/ w% l5 a+ |; y; R
}
; E5 B8 F( e7 G) Q# f, a6 t第二种方法:数组2 \4 ~+ }0 p* x7 N+ n% A* u5 |4 _. Y
#include<stdio.h>* }0 M& Q" T" q2 Y* `1 D
#define M 8
+ V9 `: D8 W* M. Pstruct monkey
: k; [" [' O$ `" m7 u{int number;5 ^2 ^ N# X. p3 U
int nextp;0 [( ?+ C6 z% W) n- E" I4 h' n5 ^
}link[M+1];: m$ @$ u& X- v! t$ X* P) F) @
3 r1 N7 ~; Y* X1 t" zvoid main()
" p$ W A8 m" f) C# i9 y6 G{int i,count,h;
% c- p6 p' b2 Q! a" s# A4 efor(i=1;i<=M;i++)+ m. g1 Z8 f7 O% b9 g
{ if(i==M)
5 g w! R: j0 |+ X# h# K link[i].nextp=1;! o) Z' V3 Y8 S: p- M3 j% r
else% n6 Y) J4 h! Z+ m
link[i].nextp=i+1;
D" }# G! y" ?1 w3 m% N) w3 E link[i].number=i;( f1 L% `, X) }+ g$ z3 _
}
0 f5 L% ?+ Y% H! J" Zprintf("\n");
8 w$ W U# ~+ ]$ j1 F+ h" E' ~% Bcount=0;3 @( x6 [& S6 e. T1 G! _
h=M;
& m+ g$ d. \/ t8 {printf("依次退出的猴子: \n");+ n& z9 `3 y: W V- Q$ s
while(count<M-1)
- N2 [5 k2 n+ i3 o1 ~ S; l6 x{i=0;
2 N# O8 w7 y1 T0 d1 _2 Swhile(i!=3)
6 \2 _! {# T) |{ h=link[h].nextp;
+ _9 ^# K: ^0 Z! c1 ~ if(link[h].number)# q3 T: f# |, L, O6 ?- I3 o
i++;}
6 {' ]0 B/ s8 }4 W1 W/ B8 d" C& a! ]9 x+ c2 W
printf("%4d",link[h].number);4 p7 v5 I3 E7 m7 O$ a5 }
link[h].number=0;4 o8 F+ h4 A U( z- K
count++;" Q- i/ `; `& ]
}
* l7 X6 o: Z& x
" a( y1 b% \/ Y) \/ I bprintf("\n大王是:");
; W& @% Q" L) Y for(i=1;i<=M;i++)5 E3 H3 |, h+ q9 U* k1 p
if(link[i].number)# b3 R9 D9 k3 p2 v$ X+ S6 X4 C" t2 D( c
printf("%3d\n",link[i].number);4 w! a- S( B& T! d
) F8 d8 N! ^% z" ]
! O/ e- z" \2 a}
; G0 f3 c N" a第三种是普通方法for循环8 f& \% I& k# w2 r& a' s0 w
#include<stdio.h>
- @' v; z; R7 k) ]6 B; ovoid main()
. y, m9 V2 P! h) T7 u- D{ int i,k,m,n,num[50],q,*p;0 k4 k# w# N% O
clrscr();: F% q3 v* B2 O/ O" W
printf("input number of person: n=");
/ V6 P. i4 v, H+ i scanf("%d",&n);6 u( Q. a' E& z$ x1 x7 |
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只9 U5 x1 m) p% A+ H0 B5 @5 e
scanf("%d",&q);$ w) j9 a9 x7 T( b. r. y7 E
p=num;$ V0 o: f2 T- @! E+ V( B
for(i=0;i<n;i++)
1 z% X6 H9 B' K& h) t *(p+i)=i+1;
/ }9 j( q: P- l n7 f& s# y/ z i=0;1 u( J5 ~! F% t) ~. \" J
k=0;
# |6 I* B8 x8 r) K m=0;
6 c$ _# W1 w9 T9 j; w5 t while(m<n-1)* L) w9 I) j# o4 J5 M
{if(*(p+i)!=0) k++;! b) J! T4 U4 ^' D
if(k==q)# A1 a) K, i" S, D! k
{ *(p+i)=0;4 I+ {# o: z3 J1 p
k=0;: t0 M3 P9 g; a, r! C! \& ?
m++;
' J: B6 ]" u/ `2 N, `( f }
) j' y& x' c. W i++;0 E9 o3 R4 g9 j
if(i==n)i=0;
5 e; r4 [& X4 }2 L9 y }& O" x. k* Z1 W& Q
while(*p==0)p++;% r* k4 T( E3 c9 V
printf("The last one is NO:%d\n",*p);
0 n. R. U( _5 | getch();0 l, }7 j, Q* R! b8 d5 n. C
) F) K( A) F/ _3 v B- \. c' p' E- S
} |
|