|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
9 S. ?4 A: N7 X9 j" ]5 j8 `1 V这几天我在忙着编一个问题,我用了一种方法编出来!
8 g) B$ e% m0 P, g" n但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
8 ~7 w6 Z [/ k" [0 `# }& |4 O注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 - b/ q9 l1 M. I7 @4 M, U% b( B
# L! d& m7 v1 x7 h ^; l. o; ]/ p9 ^/ `; A& F6 L
题目
6 [( ?7 H4 a) |! m! c山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。4 b9 u5 w8 b8 o: c4 K
第一种方法:利用循环链表
& y! \+ t7 p) |/ ?2 c3 e5 Q l- M" J#include<stdio.h>
7 j0 E7 v5 N& F! e2 G7 K#include<malloc.h>
J% b4 \3 K" F. K9 V#define M 8 //共有8只猴子& ?( {$ C( [6 v! s+ n
#define N 3 //数到3只时退出第三只" @. B; e3 m3 L% f& f$ m
typedef struct monkey! l5 }7 N# e( D L. ^# X& c/ f
{int number;
7 A$ N$ [8 l3 u4 `- A3 h5 Zint flag;
$ Q' w2 t3 l. G9 |+ }+ z5 Q, |4 Estruct monkey* next;
, Z2 r, E. c; w7 Q}MONKEY;/ e& D# Q( t: ~8 r
main()
) t# b* N1 P2 e/ I- d7 z2 H{ MONKEY *head=NULL,*p,*s;
8 H1 M" x/ ^: i int i,sum=0,count=0;
% \7 \# Y9 q& C, J% M. | clrscr(); //清屏
: |4 A) R E' ] p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存# Y5 Z9 j) a5 }! E; F
p->number=1;p->flag=1;' L3 J4 i- @7 [6 t* X
p->next=head;
, ` G3 Y* U" K: a D% N head=p;( @+ m) U! \+ W
for(i=2;i<=M;i++)
, @! \9 A- Z. p1 J2 j { s=(MONKEY *)malloc(sizeof(MONKEY));) A# b b+ ~; R# r9 ^
s->number=i;s->flag=1;' d+ ^8 N9 {4 y
s->next=head;
* x8 ]4 {5 J% A; U! X' \ p->next=s;p=p->next;' E* q3 p" G# X# t g
}
9 n- F. a9 F' T# g p=head;5 t4 m1 j( ]9 K; c/ Q% I
for(;;)+ V! T/ U* k3 ?
{if(p->flag==1)
" t8 @5 G/ a4 ? count++;. G6 Z1 l( B( d0 g& ~# }
if(count==N)( p6 o, x0 w& I# f% u
{p->flag=0;$ C$ W9 Q. S- P8 ~! H* B: O' T, i
count=0;- I8 i6 t# v$ }# T/ K
sum++;}
7 [. S; [- ?- A. Q7 i' b h8 n Y if(sum==M-1)
7 _$ p. P/ |" B/ M6 ` break;
9 K0 a2 C! b7 X* F7 i p=p->next;4 x8 G8 p1 ?* |5 P
} I$ {& ]: ~ \! ~9 Y( D1 z
p=) C; Q# T, S( Y$ x! l
head;; c2 s3 O. v0 M' K
for(i=1;i<=M;i++)& s; f( s. p- O1 _+ V
{ if(p->flag==1). p) y5 v9 d) g
printf("\t%d",p->number);
2 p4 `1 M2 J7 v3 ] \; U& y- T p=p->next;
6 s9 v2 y1 ]: L/ a' u/ W F4 M# f4 b }5 \/ ^5 ]* U2 n# [5 a7 @; | N0 z
/ `, y4 o2 w1 A) u* S+ y7 I6 D3 O0 A* U: k- t9 E5 g9 F9 b3 F
3 E/ U( y- W$ U} 6 }$ j+ x9 s" g3 M( q! W4 t- R
第二种方法:数组
( u6 A, b9 h: S) j3 s/ b#include<stdio.h>
" q* N, Y2 |) T5 }5 W$ m/ Q#define M 8
5 |8 m Q! i; l0 zstruct monkey
: X# _3 Y9 }. T1 W" h& S# B{int number;0 n; B7 s$ Q. M& w
int nextp;+ {* j7 f0 G2 Z9 V4 `3 p0 }6 G8 r. k
}link[M+1];
8 B% s+ Y9 H; z3 n, d8 b+ i% `( } {& P0 {* `0 u# H! [( L
void main()
$ ~- {3 D. X( Q{int i,count,h;
3 d- R% W6 n6 M' Ufor(i=1;i<=M;i++)
3 o# n0 o- x! t- o; z1 Y+ m{ if(i==M)
1 T3 t8 t: l$ X/ G* Z# U. l8 w link[i].nextp=1;1 }8 n6 B$ r$ t0 e* p Y
else
* l' X- ]8 u, b: N3 Z- ~0 s link[i].nextp=i+1;: j0 x2 y! u& R) P: H
link[i].number=i;! {, A9 I7 ~7 h @: ~7 ?: }# J2 j
}% \: N2 Z$ L( W* e) r5 s
printf("\n");" T( o* }( T. u( B' Y
count=0;
5 D2 N( T/ H3 X$ K% f' _" rh=M;( V( c8 h! A: o2 ^
printf("依次退出的猴子: \n");
9 i. a5 w5 h0 N) \$ D3 Cwhile(count<M-1)7 J2 s k* q2 n$ _4 I$ W
{i=0;
5 O, @1 k$ I" N6 e. B# Twhile(i!=3)# i$ R! [' H0 q8 z8 S
{ h=link[h].nextp;
3 C2 w: p0 X" X if(link[h].number)5 ^3 }( K1 x! N( M) p+ ]( s
i++;}
/ z+ P7 s4 X$ { M" A# D. |7 a2 l# R* t& l2 W5 @1 y) Q
printf("%4d",link[h].number);
! [8 ^9 n% p) Z( O Q @$ klink[h].number=0;
7 G$ i& F6 F9 {4 G& ucount++;
# \% e* C2 S4 i; W# Y9 A4 Y& f4 }& i}# B* N8 K. M" V) X! a9 ^7 u& I" W
& Y, T2 t% e9 l) xprintf("\n大王是:");
& h8 R: A+ g2 T. V# F; s for(i=1;i<=M;i++)
& |$ |2 J+ o( Q if(link[i].number). @) ?2 G; }/ B, m' g. ~
printf("%3d\n",link[i].number);
7 B% Q" S4 @% e$ k+ p( s( u
8 H, Q- f& ?/ @
0 L: ~0 _- W* K5 w( X% h} , l) \. A$ }, D& a$ Y
第三种是普通方法for循环
. C, W( s3 A* |+ c' F#include<stdio.h>
1 |3 Y$ V1 ?* N- s* I* G& V5 ]9 Tvoid main()
$ v8 S$ K( l$ S* B{ int i,k,m,n,num[50],q,*p;8 W1 ~% D) [) ^; @& m
clrscr();
& U" |! D" e, P4 u5 p printf("input number of person: n=");
5 U0 e( H# m5 U$ b/ Y scanf("%d",&n);" _) |/ t# Q& R1 f/ O, \% A1 z1 U
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只) H+ O* C! n; f w
scanf("%d",&q);' a- w# v; g u. b) j% f) L
p=num;
; u: ?" ~0 r+ E( k% j for(i=0;i<n;i++)
. C, _! ]! w' v1 A9 e *(p+i)=i+1;
5 q: E8 ?/ [9 S6 }! h, y" h3 E' X, o i=0;+ R- ^6 Q) e7 K
k=0;/ `. ?+ V$ r u$ }, K! \
m=0;( m9 d) f7 L! j# d
while(m<n-1)$ v8 y" w" Z( r% M
{if(*(p+i)!=0) k++;
' P% Z0 f) X4 c4 L4 k$ x if(k==q)
- Q, m% }& ]5 z1 Z2 j* E { *(p+i)=0;
& B, T' v- z- U) M$ C8 C& Z k=0;
& b' q2 w$ ]) O m++;
A9 M; L. `: `0 u8 x& W }
( F8 o4 E- G* O. a- H% {, ] B i++;: g( w% y( Q. h) _5 {' A
if(i==n)i=0;6 ~' `& ]1 [& ?+ ]& e% n
}
1 z, M% ?8 e1 q$ r. l1 Y while(*p==0)p++;" `9 _+ \* i1 B
printf("The last one is NO:%d\n",*p);
' A( }0 n, y6 _$ U- z' G5 X( r' J c getch();
/ R! O5 _9 l6 A& T5 F* W7 O" i3 y; x: {1 o! J F
} |
|