|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
! S: P3 x& a0 F5 N这几天我在忙着编一个问题,我用了一种方法编出来!% G' g/ `; y3 {$ Z. z" O
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
' x. S1 W# |, ]' D+ g0 i8 {注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 & l0 S0 H! g: ^' W _. h
5 N& ^$ |) r- _$ i6 u; J% K5 h5 @" O f+ j- S
题目
, N0 k0 `1 G2 ~' w2 m/ c) \山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
( B( X( z2 m" K, N第一种方法:利用循环链表
* g8 R$ x. {. z#include<stdio.h>
. V1 l- `2 i/ J) i* v+ V#include<malloc.h>
" J, ?- V$ Y+ P, `0 }#define M 8 //共有8只猴子; j2 J C k: P/ X
#define N 3 //数到3只时退出第三只
2 V7 n0 F' @' V, T" n% z) R1 Ztypedef struct monkey
1 g+ o, X) X+ h) w& L{int number;4 Q8 L( _6 V6 D% j; \! R- f
int flag;
) t% @9 d6 @. B( q+ i9 fstruct monkey* next;
' {2 a R$ e7 o% V: Q- W9 R9 w}MONKEY;
6 ^+ I: q- D0 W/ X+ |5 y4 ? Imain(); x& B: m9 K) g. I
{ MONKEY *head=NULL,*p,*s;! O* h; V* Z% H( d
int i,sum=0,count=0;
2 q; Z) s6 r. @2 t% q clrscr(); //清屏
7 Z( J1 j, g0 \/ E& r. ~; O Z p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存7 H5 b8 O) X8 U3 L
p->number=1;p->flag=1; ^0 L& p2 Y# Q
p->next=head;
) s/ ? I8 v: R) r head=p;" F- T2 w1 n+ E2 G7 w. u. l- l
for(i=2;i<=M;i++)
: @$ b6 @, u2 D) q) [% n/ I { s=(MONKEY *)malloc(sizeof(MONKEY));: m0 m+ _9 {# m$ d
s->number=i;s->flag=1;
- w: X+ q' k/ w# m7 `, ~ s->next=head;
; W) f; W2 d2 S1 J2 Z p->next=s;p=p->next;
a+ q; O; y7 @$ a6 Q+ j r% [. h }
4 @1 M, I, V' L3 ~ p=head;) _5 R6 N: M9 p' }4 S/ d
for(;;)
( M# h- P$ \& ?' [" m4 W+ J6 [ {if(p->flag==1)
+ [; M2 Z x5 i1 R count++;: K; u* \* h) `( b! I+ w& V* Q
if(count==N)* y6 F3 @- |% r' y: q7 z
{p->flag=0;
- a8 C8 K8 J7 L$ g( |# _9 d count=0;
5 \% b- ^; r- t* b0 i4 b, X$ ] M sum++;}
1 x# X1 M0 K4 ~ _ if(sum==M-1); t8 g9 e2 u4 I/ v- X
break;
6 k6 t& F3 F' R$ Q$ F7 d" L p=p->next;
! t& P/ l* z" o4 B; T; O" m: @ }
! B/ O V6 a$ z5 Q- t' R% } p=+ V2 Q4 f, O9 G& g0 j# j
head;
. v! m4 O `# y# r for(i=1;i<=M;i++)$ r7 v# I9 ^4 r
{ if(p->flag==1)
0 q. `6 U# ~. @: x0 C5 e9 l+ H printf("\t%d",p->number);
. X7 _# I2 K8 i; t: t! k& Q0 m. d7 v p=p->next;9 R7 o: w) z( l, l
} _. Q' p. P; L4 t
0 w% E5 U& l9 N' h. O* q# _7 O
( Q- w: G# Y: A% @5 E
+ F0 o& Z. c/ f- P) I
}
) H- p+ d9 t* t+ Y8 b第二种方法:数组; P5 ?7 ?7 n# v( v
#include<stdio.h>
" A2 r! I [. d% y#define M 87 N, t& e2 L% C' G8 Z; V; i
struct monkey0 R/ y% d6 P9 Q
{int number;
$ y) o! }% J+ [int nextp;! n5 V, M; Z8 l9 a$ Z' W V
}link[M+1];
, V% I, [; z+ ?
( G" e( |. d3 B: z5 \; l; Z1 qvoid main()
2 C( r# i7 ~! H2 r! {3 k# {- ~, A{int i,count,h;
/ P7 b) ^) z( i$ Sfor(i=1;i<=M;i++)
- a; N+ l8 H; \* G{ if(i==M)
5 q( D+ A8 B& Z1 O3 {0 e% J link[i].nextp=1;
5 k& K9 F$ k+ P b else1 _2 B. T0 n0 B5 m! V# G
link[i].nextp=i+1;! r5 I' C3 Y. E' }
link[i].number=i;2 w( R# c I$ n$ G+ ]! j7 G
}
4 A4 L4 @4 E7 K6 T0 hprintf("\n");, U0 p7 }/ l! m8 N+ m, x7 D, I7 l
count=0;
6 Y L0 q0 d# t) H- _* Xh=M;) Z9 l; S0 X- |& Y8 [; ]
printf("依次退出的猴子: \n");
+ V7 e" W: U, P( D* f: ywhile(count<M-1)
0 @0 g& `9 B) R& O{i=0;
, o, n% e/ d/ }while(i!=3)
0 S2 `* _3 ~9 U{ h=link[h].nextp;5 h' J; R. U! m7 X: Z
if(link[h].number). P. m# z: U- z# e4 b% k; H
i++;}
N0 w, `( c, j. A# s' U* E
, O/ {+ L8 F& F$ p i7 o% g5 `, pprintf("%4d",link[h].number);
3 c" D8 D/ N# Xlink[h].number=0;3 i: _( a5 n& D8 ~
count++;
, v' ~" N# F. Q! k}
V$ }; x6 H( r' J7 V f
9 M) B: k/ y4 ]printf("\n大王是:");" c$ x" C( P! V& S" R/ G) X
for(i=1;i<=M;i++)
5 _1 S7 P3 S3 E( s1 c5 {, Y' e if(link[i].number)# `. z: t; t* V/ e
printf("%3d\n",link[i].number);
8 E2 Y4 |$ k) p8 P
- Q$ ?# D! Q$ z* R: y& Z9 e @6 i
}
t8 _3 A. v" p8 C: _( }第三种是普通方法for循环
8 ` V. _. v/ @9 [. @! X#include<stdio.h>
7 l5 w% j# h' p9 I/ \' tvoid main()+ H: f8 K. H7 `3 j, ?
{ int i,k,m,n,num[50],q,*p;# |* Z- d% v" J J
clrscr();# A, D" }( n' X, N
printf("input number of person: n="); ~6 a* O3 `$ E- s) h
scanf("%d",&n);
2 y* W0 Z* s# Hprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
+ S/ g5 Z6 b, A2 g, {0 | u scanf("%d",&q);* C' i, J( L" Q6 ^
p=num;
) ~/ K% D9 v% h$ Y for(i=0;i<n;i++), `: U3 S1 N1 l
*(p+i)=i+1;
, U4 r: J) D" B9 y0 h i=0;
+ n- O+ c/ C) i; s: i k=0;
! u0 ~0 F0 ?" u1 h2 L m=0;& \* W) a' S; ^4 K3 g
while(m<n-1)
) h: K0 m4 Y; I2 ~. ?- d5 [ q {if(*(p+i)!=0) k++;# k- e- \/ E. t' \
if(k==q)0 d8 G$ N7 @1 z' y
{ *(p+i)=0;, u4 V8 }( ]) Q& R3 _7 f2 L! U
k=0;& d$ ?/ b S+ e4 a5 U9 {
m++;
& Z. n) L/ h- s2 I2 D }" j7 k4 H% `6 a* s) y: z6 J' f
i++;
3 l& v# ~) r1 @; G' P$ J if(i==n)i=0;
) j' I- d& i0 g; } }
- ~/ w# j7 I% A8 o while(*p==0)p++;
. Z0 Y( E8 e/ v& W1 F6 k/ a$ C [" ^3 K printf("The last one is NO:%d\n",*p);. a9 ~" S2 f; |" [. U5 k
getch();0 X1 y2 P: \ D8 C1 m; N" r
& v5 ]! G# C6 P7 h0 k& V} |
|