|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
×
大家好!
! a3 k0 O7 q2 {, T, N5 K5 l这几天我在忙着编一个问题,我用了一种方法编出来!8 d' H! Y; x& w
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!+ }# ^% s( ], r9 ?2 H3 R7 p/ m
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
# U9 W/ d7 U4 a! \% @7 Q' E/ d( F( X3 o& G2 B6 }+ C6 ?
( [. o( W& W4 r$ X+ q
题目& `1 E+ U) S# j9 C, D7 r% D
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
4 Y% ~# h: s+ [- V8 }第一种方法:利用循环链表1 y4 c5 I) A i" u) s4 A6 a1 o
#include<stdio.h>& U4 U( d/ {# ]) P' F' v, z4 t
#include<malloc.h>
% j9 N; ?, b- k* `; |#define M 8 //共有8只猴子
; S3 d0 b7 @8 O: r2 l+ @#define N 3 //数到3只时退出第三只) g# ?0 j! Z. ?9 ?6 s0 \
typedef struct monkey
4 R9 [. t6 k! b) W9 X* m1 E* v( N; W{int number;# x4 P3 F' ^& o0 j" m/ A
int flag;' X' j7 m. L7 w. j0 y2 Q
struct monkey* next;8 }2 L* C! G5 d: ?! o+ @
}MONKEY;
) d/ [' X* X" k3 Wmain()
, w! i8 J, T# Z. i4 p9 }/ b{ MONKEY *head=NULL,*p,*s;
) j& [' m6 Q5 R, w; G! {1 V int i,sum=0,count=0;
: d/ K! W3 B6 S clrscr(); //清屏
' ], `) `' @$ F6 c# Y' @! w0 h9 g p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存/ ?4 y h+ \' E
p->number=1;p->flag=1;
/ X# y. u6 F7 z1 @' I0 Q+ ?/ k p->next=head;
" Y& I4 l' ~) Y& L2 u. }0 k" c7 t$ f head=p;/ G9 v; H0 W3 h$ u9 d0 w
for(i=2;i<=M;i++)0 ^) ~" J5 z$ q- \6 `% w3 r& a
{ s=(MONKEY *)malloc(sizeof(MONKEY));
2 a6 U+ v6 S9 }; M s->number=i;s->flag=1;
: D* y6 L3 p* R) M s->next=head;8 O$ g8 T1 ~$ M+ g* {; D6 q
p->next=s;p=p->next;
8 k: B- Q- p* M0 o& K2 s' i; R% r }
' i* S# W4 s$ v p=head;* s( ~2 Z G* P
for(;;)/ f' b. J. e6 _3 [
{if(p->flag==1)
; N( K4 A% G. b6 i) u: T count++;
+ K5 F" j% m# b if(count==N)
/ S# G6 K4 f& g {p->flag=0;
# m) G. X- u, _, G count=0;9 x) c2 I% M8 x
sum++;}
0 _. t- G, q: X3 t2 N" c Z if(sum==M-1)' v/ d& N+ z8 D; u* Z) F
break;
1 A( H3 \0 z" R& K3 x* l p=p->next;
( w* q: V2 ~8 `8 O }
! \9 A, n/ {6 l, d6 J p=
6 F! d. M* T _7 f& C: Q4 M! f head;4 z, w+ o4 Q; m. m5 `3 V$ K
for(i=1;i<=M;i++)( V- e8 a# e7 a" P: ]5 N
{ if(p->flag==1). S8 u- a. L+ _; t
printf("\t%d",p->number);( Z* W4 C# Q$ \- Q# i
p=p->next;" d$ @! I0 m$ v4 [, X; B
}
8 T8 k! b; l6 b7 S
- l+ U( V6 i: S
8 t; x, v( d+ [/ [8 Y& |4 |+ t4 B3 u8 i8 @) u; ^2 r
}
, r {2 @8 Y6 |: E8 x9 ^第二种方法:数组
3 n5 _# D/ J1 j: n3 Y#include<stdio.h>
4 @: b* ]& {) W3 X#define M 8
+ ]4 g$ i6 p9 g0 s: {/ ustruct monkey; `1 V2 G0 P6 R u# \5 h
{int number;8 A& R8 {% e- {
int nextp;
* n, z; H) w8 m' y+ ~& v: h}link[M+1];7 |8 E" C" w5 a5 z: @* L+ k
P, p9 @. L8 w; D) d- A1 w
void main()
: Q) G' k ] J) {7 S! g{int i,count,h;1 ?: s0 C* T% n0 e9 X% j4 g
for(i=1;i<=M;i++)
9 C7 _+ |- U0 x7 q{ if(i==M)
2 t, I3 c) P: w5 {) x link.nextp=1;/ Z8 u8 }( S m: J& m+ k( C0 [
else: r9 X* l0 u5 \' P" o$ J
link.nextp=i+1;' s, U9 j6 U- \! G0 J5 x
link.number=i;: y7 ~- \. t, }% I$ v- f! g; N- {' d
}
. ]: C7 ]( B5 e8 _; ]# fprintf("\n");
& M9 A; m( W/ ~5 t; H) c" p0 jcount=0;, ]& |4 k1 \% u+ _# Y$ b
h=M;* r* e; a% E' o' h
printf("依次退出的猴子: \n");
+ g/ f, A* E$ c/ ]# g8 t L' e& M/ K' lwhile(count<M-1)
* R* l; O* t3 ~5 }{i=0;0 A- {' L1 R9 Q
while(i!=3)
7 m8 ~* O0 a! }( \- _{ h=link[h].nextp;
* ?. s$ E1 a* o- d& ? P& f if(link[h].number)3 N1 C A; M4 y# Q
i++;}
8 e' L% o) f$ r' m- ~1 P( u0 \1 p* ]& k
printf("%4d",link[h].number);2 ?2 _. q6 j% d& L0 z4 i
link[h].number=0;
# ~' W. ^% w7 b; Y' Ucount++;
q+ ~1 }( D. A e* \" u. v+ r}
8 V8 r# {2 R" d: M: l# c0 ^: v3 ]5 E" d4 M9 o( h; `; p
printf("\n大王是:");
5 C) j8 f) z3 r$ S2 N) r% ?. M for(i=1;i<=M;i++)
6 m8 w3 W6 x* W6 i- {: } if(link.number)
. x; s8 h! A8 m4 D* M5 q# b printf("%3d\n",link.number);4 Z( ~6 }1 {, _2 p( O, ^: ?
" m/ ?0 O; d9 P) k) W7 A0 [9 F
" T/ s k$ M8 p5 o7 x3 H}
9 I2 u) z; _7 R: h: H9 z第三种是普通方法for循环6 {1 Y$ R& C% g0 [2 R
#include<stdio.h>) f" S/ @/ t+ K$ y6 t
void main()3 |! K% \/ {! f k5 v: G
{ int i,k,m,n,num[50],q,*p;& b0 h: G' z [& [
clrscr();$ O& t: J) R; j" h0 F
printf("input number of person: n=");" E9 @+ ~3 l9 n! _# A
scanf("%d",&n);
7 C. b1 t7 |' ?4 Z7 dprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只! B4 o) ^4 @# ^
scanf("%d",&q);
% I9 B4 D. |! s- C* w7 z p=num;* B7 O& ]) s2 A3 M: X4 C
for(i=0;i<n;i++)
/ S) y0 l+ s" _7 p2 W$ k' d" b' k *(p+i)=i+1;
. z- j2 U7 F$ n/ W0 m" f) x i=0;. X# O- U4 L. {: Q, g6 ?$ H
k=0;
+ ]3 c! a+ `7 V) E; i m=0;1 c# K) {: y3 \* |
while(m<n-1)% L/ K2 ^7 V3 o- a3 X: V! D
{if(*(p+i)!=0) k++;1 ] }/ s9 K& j" n( a- }
if(k==q); s' H. N- P6 R
{ *(p+i)=0;
. v; ~. B3 c) ^6 p k=0; L. s: P) _/ F, h5 _
m++;
# A, N3 G( M* v+ R! R, J }
# F- k5 F) M( l* O- l i++;1 U, _* a8 ^7 n4 m
if(i==n)i=0;
4 J7 B# T/ ^+ j( q! O8 j. y: e* s' o }1 U- ~. v/ j( w4 I! i! x
while(*p==0)p++;
# V$ V, B7 Z+ m3 _ printf("The last one is NO:%d\n",*p);6 \, X6 f; Q0 ~. j9 f
getch();
4 h5 e. S% J3 L1 @/ \% J6 L1 C2 h/ O: |! r
} |
|