|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
×
大家好!
! V1 G ?( Q. C9 r+ ?) R- w( C这几天我在忙着编一个问题,我用了一种方法编出来!
% c2 Z! t/ i& `6 O但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
+ n# ]- a4 s" h3 u1 L. g注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 ( \. y" l* k1 M1 _1 Y" V
0 v, |( ?: w) U4 F4 ~: C2 c
( m1 w& \" }* `& O# b6 G' C* M
题目
: F B& `! x6 ]! V" W/ \ {山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
( G) D& `" e. f' c第一种方法:利用循环链表
: D% x. D& U, u8 K1 N% i3 X#include<stdio.h>
8 S" e9 Z. }) V( c, q#include<malloc.h>
- m8 q! N; e p& T8 ]6 D) z#define M 8 //共有8只猴子
8 [$ c3 `# ?( Z1 k5 }/ x#define N 3 //数到3只时退出第三只
, e. I# m9 r- Ttypedef struct monkey. X. j2 W* Y2 x1 J3 Y2 n$ d
{int number;9 r; s" @$ o6 W( J2 h' p
int flag;! m/ h: Y3 i6 m$ J& u1 I I9 Q
struct monkey* next;
& [: W e3 t6 E}MONKEY;
0 P$ V1 z5 L) p" Qmain()! x! }+ N7 s8 O1 M$ @1 A
{ MONKEY *head=NULL,*p,*s;+ _& b$ b. Y& u2 P
int i,sum=0,count=0;& D7 z/ d+ b9 O. o
clrscr(); //清屏
& h- n: ~3 h4 ]' r( C2 D p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存3 z5 l+ C4 y `' W6 F/ j7 y6 ?; d
p->number=1;p->flag=1;' l8 D$ Y. n4 r6 n- T# O
p->next=head;
! N# V3 ]6 Z5 J3 Q8 O head=p;
: F: n" \9 |( u& u( g0 L for(i=2;i<=M;i++)
* {1 P; w& H# i# |% \' g- ? { s=(MONKEY *)malloc(sizeof(MONKEY));4 q. D9 t2 p# Q; x0 @8 X% Q6 {
s->number=i;s->flag=1;
0 u3 C2 B, \5 W6 ?- [ s->next=head;+ {) _, j7 Z- y% i
p->next=s;p=p->next;
7 c/ x' X( Z* [) F" ` }
' A6 D, R4 o: d; F2 u: d p=head;& ^2 t/ s3 G1 Z p1 w
for(;;) w- x( L. G+ L" y' n
{if(p->flag==1)+ t6 B7 x6 \4 x
count++;
" |, f- T, ?0 A0 c! y+ N; y if(count==N); [; ~& f+ I- ^. a
{p->flag=0;
# ^ ]8 e, y1 p& |. ` count=0;
+ i0 M3 u5 g% G- b1 ^+ | sum++;}
7 M( |# y9 H9 U! n# u if(sum==M-1)) o0 I! Y. T* Z: I3 W
break;
$ \, `3 `5 V }5 v7 W8 V p=p->next;
! k" g) Q7 p# J1 k }
- U, ^6 |8 C7 a/ A8 @8 B p=
" k! O l6 y" m head;( h3 L5 x9 V. y- j) n# w& f0 u
for(i=1;i<=M;i++): z0 T! K% ?9 h: [" K: e- }) I
{ if(p->flag==1)/ |+ x/ b: H5 ^/ i& {4 y
printf("\t%d",p->number);0 F m4 y; B. g$ I
p=p->next;! Z. G: ?7 j1 k p$ a: e0 E
}6 U: T1 V: ]" F7 T) D h
$ `2 F4 S }- T# Y. F) u7 g7 H2 z" L( d4 H' y4 f
( l' w: S9 f- D+ E9 a} ; m3 {: M6 G' Z* L+ R
第二种方法:数组+ A/ W! \2 f# z- f' v8 P6 z4 \
#include<stdio.h>
- u1 C! u' @2 s( u#define M 8
: g1 r6 P. Y Q: H8 k1 U6 ?struct monkey0 f) h" p" B3 a2 u7 U$ n! R
{int number;
) G o2 `: d9 t( mint nextp; g+ i% t9 \# m- y2 |
}link[M+1];0 ~9 {5 a5 D! {# o1 j( G
& i& E1 ?& o0 Y! c& v2 h2 z4 Ovoid main()
) C1 o% H0 W& m5 C. Y1 |8 Y# z. I{int i,count,h;
% C7 l3 c8 |6 a' o% cfor(i=1;i<=M;i++)
: I1 l Y) a' s/ { C4 ~7 f8 f{ if(i==M)9 k- J [3 X' Y+ @5 s
link.nextp=1;
1 V U, y# i/ o/ C0 T+ j9 M, V8 @ else
! X1 h" [( t7 y! | link.nextp=i+1;
6 n( M3 b" s! m8 R p link.number=i;+ k3 X6 k: y" E1 \4 r
}& C* y5 |( B2 I$ o% F
printf("\n");
- ` t1 N0 ]' o( E- tcount=0;
; P7 u* V9 m' m9 b- N0 t: x7 R1 qh=M;6 V% H: ]8 m; V% b
printf("依次退出的猴子: \n");
/ r% N. Z+ T2 ]- X" z: Uwhile(count<M-1)
4 _1 q# N: _# X" j& c/ }{i=0;1 r* T- i# ~3 }, @" ]
while(i!=3)
4 b$ I% z# \9 R( n7 B' o{ h=link[h].nextp;
, S8 x& S; E; a6 H; K' n if(link[h].number)* H9 _& f7 b* e( i! l9 R) [% {8 f
i++;}
, g; C0 s8 q* @3 A& l- Z1 _ }
9 }- v' U9 Z. u" yprintf("%4d",link[h].number);) ^6 A/ T) Q$ @8 n
link[h].number=0;
8 |5 y6 c" Z0 G1 _' N+ fcount++;) o9 f- e& [& X+ t
}- p; Z4 J. [1 L4 h9 `
, E0 X. S( S( B/ n' D
printf("\n大王是:");
% n0 z1 [8 g1 B8 U! V: Q% H9 c7 D for(i=1;i<=M;i++)
2 B& _& A+ Z8 ?. ]/ q- ^ if(link.number)
# S7 c. i. K) J% E: y printf("%3d\n",link.number);
' o7 b/ z+ Y' m+ E8 n. n# L# {9 {" X. X
7 G/ p9 c: T0 c8 R" F6 h: Z# x} : _6 h3 I5 d& z- `" A
第三种是普通方法for循环
2 ` c: g! b$ B! T#include<stdio.h>
! p- B7 J, H: j9 m4 P% A/ K3 nvoid main()
$ p2 F1 `) Y0 M5 `& T{ int i,k,m,n,num[50],q,*p;* `' _; T) ^2 V# t; @ e. E
clrscr();
, c$ f8 @; k4 h9 F printf("input number of person: n=");
2 k2 u, i. z5 w scanf("%d",&n);
4 i5 |& ?4 m9 l( x5 B" qprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只, p6 Y4 O6 j1 u1 c9 _& c( ~8 c
scanf("%d",&q);
; |' a* W9 B m, h4 m) P5 j p=num;
/ D4 a$ L7 K) m C6 [5 K3 {. u for(i=0;i<n;i++)
7 w8 h( Y6 {. ]/ e6 j3 q6 d *(p+i)=i+1;2 H5 }& C) Z5 f4 f* I8 A/ a% [4 P
i=0;
' _6 r- y" @4 p9 D k=0; r! ^" |: ?4 l7 Q
m=0;
0 [8 J2 V! {+ [. ` V; T while(m<n-1)/ F8 T) u, S; R& q
{if(*(p+i)!=0) k++;+ [! Z1 ]2 t0 ?: c! S1 M/ s0 \
if(k==q)/ E) ?- v6 {/ a E! x, {
{ *(p+i)=0;
$ i, f. |3 a+ Y" u- J3 x6 i, S, X: H k=0;: d& `* h9 m$ i( I' s+ m; S; r
m++;
$ R2 M2 X8 c% v/ v# q, V }
/ x b( V- F J0 h i++;
2 l: d% V+ r& O" C7 G! f- I if(i==n)i=0;
0 @1 P! K3 Z) s* S, Q! G }
0 o# H: n' W% F5 @* e) c while(*p==0)p++;, U* g3 J+ i7 W& M8 x- ?# z
printf("The last one is NO:%d\n",*p);
$ \- L4 \' y- z' B1 ?3 x* P getch();
: G+ ]6 t6 L0 Z+ e2 g: Q; r' w$ M" H- f1 z
} |
|