|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
; S; K; V Y: e1 J0 S3 p+ U+ q+ v这几天我在忙着编一个问题,我用了一种方法编出来!
, x6 d. }" R: t8 ]; J* ^但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!% F% ]7 O) q2 s% ]- Q0 e9 W9 l- \
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
# z$ h$ E6 o3 B4 U4 r) a1 L6 [9 ]# E. i0 L' O
; n2 N2 b7 y/ O; o' T
题目 H5 t" N0 Q* t6 ]! a% h
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
/ v* M. ^- v' Q) L: X4 f% p4 g3 p第一种方法:利用循环链表" ^, Q' E" C4 q3 T, |# N
#include<stdio.h>
5 G! o j7 A0 q7 V+ e8 b/ B, G+ C, c#include<malloc.h>
2 Y% {2 H" {1 }1 X, z7 Y#define M 8 //共有8只猴子
) v6 Z& g! y8 ?, ~6 M. E#define N 3 //数到3只时退出第三只
0 k* h7 k& M) U9 A! t" z$ mtypedef struct monkey
- V* |* @8 [$ |5 C{int number;
4 c. t. U; H. V7 O6 X3 W) nint flag;
- c4 o8 n2 ~! V! H* y0 Vstruct monkey* next;
. f& ]1 \, N6 L" I/ Z}MONKEY;# l! S3 v% S3 Q5 }) @! Y+ F
main(); b# ~1 k4 z1 \& w$ u$ ^( P
{ MONKEY *head=NULL,*p,*s;
4 r. J% a9 U5 ` int i,sum=0,count=0;: V9 F# D5 t: y( C* B
clrscr(); //清屏4 n9 h# ?9 [* x1 P1 b" I: B- D
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
* E+ i7 s/ R3 X p->number=1;p->flag=1;1 s4 f7 ]6 x; [5 }. @# ` ^: k
p->next=head;
: P* E" U0 E& @0 Y1 N- R# | head=p;9 R9 s y, Q) w( O4 q% M1 V4 ~& r
for(i=2;i<=M;i++)
; v" w2 t1 q* S7 P! u: ]' ^ { s=(MONKEY *)malloc(sizeof(MONKEY));
1 h' C5 Z, U0 }* x' Q s->number=i;s->flag=1;. H: }) {2 w; v- f) s- A: ^
s->next=head;
7 {5 r5 e3 x' j- [- W. A* v p->next=s;p=p->next;. Q3 q* f, I0 w
}6 T$ D6 c! u. }# E5 J
p=head;/ C& k1 y% x/ K5 n& N$ ~& w$ U% H0 Y
for(;;)
6 T1 M# C$ q$ F( A t {if(p->flag==1)
7 G' t$ p" r# ^9 n6 M count++;
/ Y0 N( U+ L0 _) H5 s4 D# v if(count==N)
/ F+ [6 T3 C( u6 Z7 N {p->flag=0;7 s& G+ H. I+ V* t
count=0;
7 R' R T; q8 k% {" S" n sum++;}
; O1 {& P9 c/ S2 [8 | if(sum==M-1)8 E0 K% w5 y3 R+ t0 u) _
break;
8 G7 ~8 H- n+ f3 X' v0 }" b% b p=p->next;) o$ E w$ O. z' f4 L/ J
}
+ C) o7 q6 r7 p5 M+ k0 O p=
$ Z- v4 A2 _ e9 `' U. G: f, X head;4 t% y; j: R6 @ {" a3 f: ]
for(i=1;i<=M;i++)) y, t) l, e( L) z
{ if(p->flag==1) f* s! X3 k2 Y* n {
printf("\t%d",p->number);
4 r/ Q! ~. K. N) D! v; z# F4 w0 H p=p->next;
4 W3 H3 }( r$ O3 f# D& C, Z8 Z }
3 s7 b) w' j9 Q7 B4 R3 G4 N' G1 C4 s0 h) f9 d* }
: w) \" [! Y# o2 k& s
Z' \4 a6 g1 v! m} 5 j/ O& p) v3 `# S' O, s
第二种方法:数组
- ^1 |* j5 ]3 a, l. v#include<stdio.h>$ h/ J& g& [! |2 E' b1 F
#define M 86 y3 c; u' u: i2 a z
struct monkey: L9 i' j Z8 v a. U
{int number;, H% s/ e( C* E" B0 x. a
int nextp;
- H, Z5 O3 ^+ S5 P( ]}link[M+1];# ~& Y5 L+ J' _5 V. Z
' a9 l6 t1 T* z# ~/ J
void main()- c% B+ C' y4 Q$ X4 w4 a- a+ Y# V
{int i,count,h;- @1 e3 J$ U5 ]/ P, w$ k; g2 `
for(i=1;i<=M;i++)
0 W |* W! h& b: b{ if(i==M)) M3 v% e) O0 n
link[i].nextp=1;# t* r7 b; K3 e1 s% I
else
8 N; F" N. p1 \/ r0 d$ o link[i].nextp=i+1;
' o# s1 k2 {' U: d5 |" O link[i].number=i;7 ~4 n- i6 B' x& D) i6 s
}
/ ], j, q9 h$ H# w, Bprintf("\n");* I7 F; o, n, S% `9 S% `
count=0;
, u) p+ z P# F% @h=M;
$ Z" [( b. ~# z. v# n3 Z; \( kprintf("依次退出的猴子: \n");
' o, H+ ]# N; B3 Hwhile(count<M-1)
6 C4 H1 P9 G, W. d* x5 a; w9 i/ X{i=0;
' h9 c2 A2 l0 J5 iwhile(i!=3)0 M/ t6 ]- B9 ?0 I2 F; s+ r1 }
{ h=link[h].nextp;
% \6 B/ l7 C/ a; r- v if(link[h].number)
1 ~, V) m. I8 ^1 ]" n+ X' B' q9 T$ @- I i++;}
+ k3 R+ `/ K9 `6 ^" A/ ]- G9 L, a+ F; K% s+ \& m# h3 U, Q! r* b
printf("%4d",link[h].number);
" `0 c5 ~& J6 Q$ G6 Elink[h].number=0;
8 ~% a2 K/ i0 Tcount++;2 `; W2 o, B; \- V. o6 Z* r4 ], \
}9 c$ _# v1 T( r3 S. Y5 o$ a
|2 N' f2 r3 d6 K. r/ R
printf("\n大王是:");7 ?( z! a5 s! h$ X% X
for(i=1;i<=M;i++)( g4 M5 \, G: D# W5 \9 d4 R
if(link[i].number)
. N( }5 `" ^" H/ o printf("%3d\n",link[i].number);: @: n# f' ^( Z; R4 D9 e$ j
1 E! p# O- B" d' U: a( a1 `6 X5 F' U! ~. s+ _8 m3 L N
} 6 r: \3 p' R1 P" n A. {
第三种是普通方法for循环+ V4 T/ A- p3 l1 P; N5 |
#include<stdio.h>4 s& h% \# f. G9 O0 V
void main(): k2 r9 R1 n ~9 d# F4 s2 |4 {4 k
{ int i,k,m,n,num[50],q,*p;
" {7 O/ _7 K5 Z' Z3 v3 q clrscr();
2 y, J+ s; i* E, b printf("input number of person: n=");7 X X9 `# W+ M3 Z$ U6 N I
scanf("%d",&n);
& F# v% O0 s5 o/ U4 R f+ Oprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
* s& R2 m6 n2 U" }! H scanf("%d",&q);
" p, }, ?. s# p2 n" t p=num;
X7 o- U2 ?* a) l1 Z for(i=0;i<n;i++); {3 d9 ]6 l" H. D
*(p+i)=i+1;' k4 H* d3 m0 e# ]1 L. j+ Z0 o+ g
i=0;
8 W$ q6 p% O! I1 u( h3 d+ A# J, M k=0;
# g8 ]" H. ^2 [! w( } m=0;
4 r% c2 S b- U8 z. {& f# W while(m<n-1)
g5 o& ]- J6 H# O6 l {if(*(p+i)!=0) k++;7 V3 J% s1 @+ X @
if(k==q)
1 D! f& I. p- q6 O { *(p+i)=0;
$ m- C* s& c% x, Q, p& F k=0;
$ G I2 _8 j$ X _" a m++;, Y/ M5 i& O" R" J: S
}
i8 H/ U4 V. P4 { e4 t2 n i++;3 P+ I4 l8 y- v% M
if(i==n)i=0;
) `4 n" V S5 ^ }
% m9 W v$ R6 z% Q: b+ v7 u while(*p==0)p++;- A9 T$ O9 Z" T$ @+ F; G
printf("The last one is NO:%d\n",*p);
; s* j+ f# O& P+ d getch();
# h2 m0 S' R4 g- [8 a
, D- t" Z# v' V: v7 q, L} |
|