|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
/ r# G) f0 ?3 ?0 e这几天我在忙着编一个问题,我用了一种方法编出来!7 \" D9 x6 q+ Y
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!, d2 z$ K, e* u! u1 ]/ E- ?- x
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
6 W- T. S" w; ?$ S* w! @' x
3 I4 [+ s5 b" |4 @* Q
4 k5 M; P* A0 V: q+ q) ~ 题目
2 Z* L- l- |' A' z" m2 s& m山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
* k0 J3 u5 w1 P第一种方法:利用循环链表% o( {1 k, K6 T8 [
#include<stdio.h>+ G2 {: C' |% C
#include<malloc.h>/ ~: \, G: n# K& ^* d
#define M 8 //共有8只猴子' k. r) K: f# W5 u" m* h0 a
#define N 3 //数到3只时退出第三只
g1 `2 m$ T/ ~/ ` l- xtypedef struct monkey
+ D2 z2 j4 V* P, Y5 q- }* j2 L{int number;
9 n6 @+ s# X# Z% q; r9 e- iint flag;0 c! M! s5 F3 a; X4 q+ K$ ?
struct monkey* next;
+ z6 x& |, k& r1 i' M, A}MONKEY;
) B% b* N* v }2 W$ }6 T! B8 fmain()# o$ K" G" ?6 [+ x+ T, M1 Y% W
{ MONKEY *head=NULL,*p,*s;
2 B, Z/ z1 r1 z$ x8 U9 o int i,sum=0,count=0;
# }9 P0 q ?0 B clrscr(); //清屏. \, A4 r* ~- c8 N/ Q+ _7 y
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存. n" E9 K; y% _7 Z* I% l
p->number=1;p->flag=1;2 l3 D7 ~% k2 ?" {3 }' ]
p->next=head;, O: I6 y @8 D& y4 R6 ~7 s& y
head=p;
8 I/ R* c9 V0 c, j for(i=2;i<=M;i++)
2 g9 z" j" S* P2 e' W- c { s=(MONKEY *)malloc(sizeof(MONKEY));
0 q! L% C6 D. K9 Q1 C$ T3 g s->number=i;s->flag=1;
. ]6 H( K4 s' w4 @6 V, l s->next=head;
( D( s& ?' O6 c% y p->next=s;p=p->next;. `. R `6 h" v- ]5 W3 J
}
2 z- C. i$ Y4 A% g0 _( Y* A p=head;; M8 d: b ~8 O$ B' Y" S' x j2 P- A
for(;;)! D# W" H( p' B, _9 B$ g: r. P4 Q
{if(p->flag==1)
5 C/ N# L. q) e0 I count++;; ^% y) X7 W( d! n
if(count==N)
2 I( a% G! ]1 U; w" S# X6 G {p->flag=0;
. n6 h9 |2 \& S count=0;
) i/ z" i5 ^* o0 j5 Z sum++;} c/ g$ C1 k6 b# P% Y
if(sum==M-1)
* G ~- Y) x* u- k. W5 u1 ] break;
0 D4 ^' x0 i- g% j( P p=p->next;- j1 V) N, Q# }. i5 @2 Z4 c
}6 f! a3 q1 s: h
p=
+ V5 ~) {+ V4 i8 n head;' g2 O: ]) S# D
for(i=1;i<=M;i++)# W/ _) u& v6 |1 i1 G- N/ q( v& K
{ if(p->flag==1)4 J, @# J' m+ J9 y) r% H' M7 Y
printf("\t%d",p->number);- W$ N3 L- h Z1 t! P0 S' K
p=p->next;
2 ^4 E2 z! A- R, p& Z$ y }
! ]9 G8 f5 t# m/ S, M
. I" ^7 W9 U! X0 I8 P6 y; g( P5 ^( L w
D+ W& O0 y e9 N
}
. B H" r" Q* q. A! F第二种方法:数组
# n) j6 P6 u; x* k: E#include<stdio.h>
3 i9 ]! d J# x; E- \. D#define M 87 t9 v+ I2 t: R2 [9 `4 x
struct monkey- i5 r* Z& \6 Z; f T
{int number;9 d: N. _- W; c0 S
int nextp;
7 F7 O: O; p4 s% Q9 L- f6 j) W8 O}link[M+1];. q2 N5 p) R: K3 m6 p% a
, C5 \7 D5 V% H2 T% @% A
void main()( J/ Q7 r# g! }6 b
{int i,count,h;( K6 r5 N9 k, i" m& E6 \
for(i=1;i<=M;i++)
4 r/ Z& ` ~; q$ F! V; |{ if(i==M)) i: f, v# G N a3 k
link[i].nextp=1;1 c* x; t7 A }+ L6 d5 R
else8 N/ Q( {$ e/ K2 E/ T+ y
link[i].nextp=i+1;
8 h( c+ z, L6 e5 F, N' w link[i].number=i;
+ n% ~4 a* A' S% ^* n" J9 S9 a}4 [' F. T& n3 E2 `4 c+ ]- }9 J" _
printf("\n");
! y7 F9 H1 m. gcount=0;
# O) K+ }4 O& P8 ]) A; |0 Oh=M;
1 ^) s( O/ Y+ [5 Zprintf("依次退出的猴子: \n");
8 r4 q' ~2 n, k. ^while(count<M-1)1 L6 @& ?6 `, s" f
{i=0;0 j- M, P# p9 g& Y
while(i!=3)
, p, G. D1 J( d; d% H" w- T- w{ h=link[h].nextp;
$ s* y) ~2 ]! W0 \( K0 H8 L if(link[h].number)
, L$ ]# i' l* l8 @ d i++;}
3 m' h" g) u3 n3 x$ L) v4 N0 `+ S
8 B% D& q7 @4 Qprintf("%4d",link[h].number);1 _) ~/ S/ T( o6 [
link[h].number=0;
" L; V2 R0 d8 b/ e% y* c& Tcount++;
2 ^! z: |9 M1 n1 y}
6 K* K# J: N+ s6 R- F6 D
6 T( h d; W2 a& D3 ^0 R9 [2 K. zprintf("\n大王是:");
3 z1 I, S) ]- T% R for(i=1;i<=M;i++)& V& r! v( ~! @8 ?1 d+ _. v! G+ V
if(link[i].number)' ?* ^& b/ _6 w6 I$ ~2 Y
printf("%3d\n",link[i].number);8 n' Q# r- o6 I# y7 \5 K; f6 t
- F3 O" S6 d- J1 h3 H# S7 \3 @. i5 B7 ] E2 s( j1 X
}
- t- G: _6 C' a) ~9 y( S+ f第三种是普通方法for循环
0 R( I8 E; @+ o3 I# y$ Q: e#include<stdio.h>
: L+ ^2 e8 g" Q' M6 X5 a- t3 R6 Fvoid main(): Z3 ?0 k9 I% Z+ @, a
{ int i,k,m,n,num[50],q,*p;
. j% k0 T6 `7 Q1 T. d clrscr();
3 f) c6 m' D+ T# h5 O$ M printf("input number of person: n=");- L2 ~1 m3 A; x2 M6 j6 k$ v/ r
scanf("%d",&n);
# D$ p, i! Z/ Cprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只' e, H$ r3 W3 i- @. q4 E3 i$ |( X- o
scanf("%d",&q);
/ c. V1 O. {0 A& p; O- Q: e p=num;
9 E- e1 G( ^! x7 m+ [- @8 t+ ?$ S8 i for(i=0;i<n;i++)4 j5 B/ E3 w7 |6 Z# Q) J
*(p+i)=i+1;
9 F& _) g$ A$ w. B/ J6 q4 b+ G/ r i=0;3 r+ H+ A9 b* u7 {3 b
k=0;9 R7 b# f8 ?% c, A) g9 u
m=0;
- ~. }( N2 Z; B" T% e4 V while(m<n-1)6 t/ e9 Y! [) Z. B
{if(*(p+i)!=0) k++;
# B% e6 y6 W: r$ g7 \' f if(k==q)( Z. s/ D) A- |8 Z G, G; ?
{ *(p+i)=0;
1 h* L1 m3 c5 j+ @ k=0;* Y2 F# G4 g- Q9 A
m++;! W7 N9 D0 H( {1 S# E1 a9 w3 Z
}" i0 O, @5 M& L2 D: p) O7 O. W6 d
i++;
; k1 }/ z1 z# I5 \4 e ~" _" {$ ~& D2 n if(i==n)i=0;
# e6 N9 x$ Q4 z! n% I! L8 |7 } }
6 E; N Q$ y; m7 Y3 b* _' j* b$ P0 q while(*p==0)p++;9 Z- ?2 v+ J$ W6 d% K& b
printf("The last one is NO:%d\n",*p);
% e' c. l1 v7 p- e& P getch();
5 h. b( W* }! i* Q. O B' }) Q; f" ]2 v1 c
} |
|