|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!# ]5 x+ N6 { P0 }* r4 u2 _
这几天我在忙着编一个问题,我用了一种方法编出来!
j' I: M+ W7 U! ~- s1 K3 Z但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
0 K% E7 t: x. F& M; l: u7 L注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
) h. X) s. @+ w# }: \: \9 u6 C5 \$ Z
* {- g( ]2 b) m& b" k
题目
7 D* L6 v: @% s3 f8 N* _1 b山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
4 y3 Q1 [5 c( ]+ y7 j第一种方法:利用循环链表# _, { w; Z% U# w9 g* {$ Q: t- [4 L
#include<stdio.h>
) p- e3 d, [7 j7 _7 P#include<malloc.h>
' v0 x0 o- E. e6 D#define M 8 //共有8只猴子
" D! w8 N- A3 I#define N 3 //数到3只时退出第三只
& Q) @( S5 J/ Y- @/ ytypedef struct monkey
, H2 N4 N4 B8 X2 o{int number;' S1 q& f5 |. I9 g$ g0 r$ n
int flag;" z% W8 |. T8 k1 {/ y0 N
struct monkey* next;$ c% G" ~* u1 X6 }7 ^
}MONKEY;
. L/ p* J; l V! ^2 x ]4 rmain()
2 J/ I L$ m# w! \+ ]- O7 v: Z{ MONKEY *head=NULL,*p,*s;
, R* M' K6 l7 B! J/ i2 ? int i,sum=0,count=0;
& R9 i" J, Q; z4 C( r( F) s. O clrscr(); //清屏
$ g% [/ S! m2 w/ C: ? O p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存3 e" G+ c' J7 z& R. H( Z3 E& Y4 I
p->number=1;p->flag=1;7 k9 [+ e, N0 N M3 ^1 o6 w
p->next=head;
4 }9 I) R" [1 r9 z( ~4 j head=p;
7 x* \, l0 }' A for(i=2;i<=M;i++)9 l1 U2 A, F `2 [$ V" g# a# z
{ s=(MONKEY *)malloc(sizeof(MONKEY));+ Q. n3 h! z6 O0 y* [
s->number=i;s->flag=1;5 E5 j& e% r0 b0 \6 v; r, f
s->next=head;
6 O& W0 t& g7 i y' I3 `2 S p->next=s;p=p->next;% w) R6 z, e1 X9 Y9 |
} \3 J2 F# H. e4 v! ?
p=head;5 b) P& m- V9 T N
for(;;)
2 p8 `" c9 q' M7 m {if(p->flag==1)
8 P. D! X# U" L2 W count++;( J4 J5 ]# `: Z2 q* f" ]- X# U
if(count==N)
; @6 `' Y2 e7 r* D {p->flag=0;
7 X7 g/ U( s+ m- I$ `: \7 ` count=0;
~ R" t7 Q; W$ z: i& `3 d sum++;}
N8 a8 z: s& q1 w v if(sum==M-1)
7 B: Y- h8 |2 X9 W. w# d$ E break;6 r$ e8 p' ], f
p=p->next;
- r x: e, p6 @4 L }
1 {' g1 R m/ G( A9 ~ p=
4 @7 B. C& Q5 p: ] S; z( ? head;
9 m8 I( H& S9 o5 {1 @1 P for(i=1;i<=M;i++)2 A- U; _ K) F
{ if(p->flag==1)5 J, \3 X- L B( `
printf("\t%d",p->number);4 r( O" v& P0 O* S' D! a! }' Y
p=p->next;& x; `, h" E% F/ q: ~5 ]2 }, X
}
& {- K4 j5 @+ d7 q5 X
) _2 r2 X Y) f; l! G/ B
2 t9 {) _) Y! f9 [4 z
6 I( x9 ]% v9 E8 e. o}
# }+ X8 Y+ w5 |/ M9 E第二种方法:数组1 @9 @* o, L9 T5 d8 E1 I0 [8 l
#include<stdio.h>
3 i. S1 T1 d2 C1 ?) T9 V+ {#define M 8: |) U' j- y/ `8 l
struct monkey% `4 m7 U1 U, f, g }$ B: m3 Y. `
{int number;
4 J" m; X" j. i2 @int nextp;2 V" o' Q9 Q) w7 D, N
}link[M+1];
. C* _/ N0 }. z0 _4 z* |
+ i2 \3 m$ {" F. e; X: Nvoid main()9 j, r, Z% R- n2 |
{int i,count,h;$ K; C4 ~+ N8 ~1 j/ s5 ]
for(i=1;i<=M;i++)
# L& `" n9 Z- x/ _# D{ if(i==M)
7 n% t7 Q) r o1 d link[i].nextp=1;
m8 x$ f) J( l4 S, O else
. v" n6 ~& f7 [2 q link[i].nextp=i+1;4 N' Y. w# Q( o$ V! w( [
link[i].number=i;
$ h) z: U3 Y. }! C}
- A/ ]1 V" \% k$ e! C) h) Gprintf("\n");
$ |, A3 c1 c% q5 v3 h Hcount=0;; w8 D) b( H2 c0 }* ~
h=M;
# }6 O1 ~( K0 }8 u0 Dprintf("依次退出的猴子: \n");0 p2 l. U6 k: k( y1 b9 a0 d; u2 E6 ~
while(count<M-1)
% r3 v, M+ W0 z" o{i=0;
- K) j9 s& @+ q B. R/ Cwhile(i!=3). h. c1 Y; b# O; C" D$ ~5 R
{ h=link[h].nextp;) I- A* T. T5 K d
if(link[h].number)
% ?' n* U0 C4 ]1 w i++;}! ^( _9 W+ q6 c5 U# \2 f- e
- |' i. D* S$ b- ?
printf("%4d",link[h].number);) H( j, `- w/ c5 Z4 X5 t5 t4 ?
link[h].number=0;
9 S& I& A1 o1 \6 mcount++;
1 T7 m8 B( v% G1 k/ D7 O$ w}
0 h+ O; k; X% Y
* s" H$ P# j% A1 `printf("\n大王是:");( T( C. k$ j; G6 t5 V) J. J
for(i=1;i<=M;i++)1 t; U% ]& E& H. R U6 a; _- D
if(link[i].number)& e4 j" }9 C& }% o4 M2 K
printf("%3d\n",link[i].number);+ f% q9 F2 f( _! G
2 n2 z$ m4 ]5 |) [
1 K! ?( w4 m4 Y( T/ [( ?- L7 x
}
* F* o7 {# t( {" [第三种是普通方法for循环
9 j9 j& S; d, V7 V* H. S* y#include<stdio.h>
/ S' Z+ P g4 e* W- Pvoid main()
1 v9 A/ x" s6 G; @0 N{ int i,k,m,n,num[50],q,*p;
% i+ C- m, s% V+ Q' z6 U* J& i clrscr();2 ]1 c, x0 W, U. c, C9 P% z
printf("input number of person: n=");
- y! }: d; N9 A; a scanf("%d",&n);
$ q1 ` C1 O* [, I1 uprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只2 q# p+ g3 {. z
scanf("%d",&q);& P9 g+ j8 e7 k, ?
p=num;, ?. N ?$ R M, ]4 ^
for(i=0;i<n;i++)
5 n. G4 A9 g; ]# T *(p+i)=i+1;
" F- k' m9 C, m4 H. [8 z% f i=0;
4 w7 l' u. ] g k=0;
2 d7 G, E) E- W; Q4 E( F( P4 L m=0;
[! V+ t9 B |8 X* u: k# S7 y6 l while(m<n-1)) h0 h" W2 j( a2 q9 v, N% X
{if(*(p+i)!=0) k++;
$ G3 a* p; W; R& y/ C q if(k==q)% Q8 L; @1 w1 l7 C- D9 ]. \
{ *(p+i)=0;
8 }( @+ ^" D1 d! y0 H+ | k=0;4 `) }% a" R7 ^5 q! u2 @7 y
m++;9 p) ~* m% ^# V; _; {1 I. J% C
}
$ _) [1 E- ?. s7 W0 ^ i++;* Z: `; h! ]9 A8 ~( M) c: |
if(i==n)i=0;% b0 y" e7 f8 p
}
, b8 {8 w# e9 W while(*p==0)p++;5 U1 A+ S7 u& ]# ]9 X' S- Z+ L
printf("The last one is NO:%d\n",*p);; |0 [+ o$ B& h+ h
getch();
/ c: v# e& X2 J3 q J0 |! Z- \- C% e4 u# [
} |
|