|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!3 y3 l0 u/ U8 q- I$ w
这几天我在忙着编一个问题,我用了一种方法编出来!' g. o w3 _/ b _8 y
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
7 ~1 n$ ^" G4 U" J7 n9 _0 G' P8 H注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 4 o/ A* y6 k6 K* k- Q% V
& @7 d" T% X. q W
- A2 |0 ]6 p/ M1 H8 `, l" C! A 题目
: f2 {) W3 ^. C2 [1 c' M/ B) b3 e山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。& k$ L: ?1 P0 t/ k* E `
第一种方法:利用循环链表
- w( j( v2 Q# L7 j. \6 Z- P#include<stdio.h>
5 r, u2 ^: u$ R4 d( ^#include<malloc.h>, ~( ^* b0 V; k
#define M 8 //共有8只猴子' C3 @, P$ w) x
#define N 3 //数到3只时退出第三只
! D I& b- `' x# z: h" b0 ?3 T/ G& atypedef struct monkey
4 J6 ~2 M, Y% I2 s{int number;
6 j" y% e( m n7 ^int flag;
3 G; O0 _5 K7 [# astruct monkey* next;
+ Z7 `6 u0 p3 m1 d}MONKEY;$ Y! V/ _, G3 f( O1 F# C
main()5 m2 `; S1 V `( Q
{ MONKEY *head=NULL,*p,*s;
$ }4 |+ \6 ?/ m9 w int i,sum=0,count=0;- d' `, o5 R e* f5 |: [+ J4 F
clrscr(); //清屏) t8 c _. @# ]" S
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存: E+ d# w) u, @" g; Q( x, C9 q, m- v
p->number=1;p->flag=1;* p4 C2 g% j( C3 z8 I! ^6 D$ T$ M
p->next=head;
4 j& g, }# c1 j9 _: M head=p;
e" i: N& F+ `& X6 y* V for(i=2;i<=M;i++)
+ A, D! L- Y; B% F { s=(MONKEY *)malloc(sizeof(MONKEY));* N" i$ s) {) i" C9 B$ j1 s/ Y9 d$ X
s->number=i;s->flag=1;
! \2 O( R# I! {2 e+ K! W s->next=head;! m. Y4 O8 j: f: G0 d4 c' }9 _8 z1 \
p->next=s;p=p->next;: Z& g" h, b! ~0 z( L
}: j/ }! l) _9 i* M# e3 J
p=head;
$ X) P$ g9 G4 K* J6 a& o4 ^6 Y for(;;)
. t! b- n8 |/ q2 S {if(p->flag==1)
$ _, f" y/ M3 J( v$ U, O% w' C count++;9 d! a& ]0 @* X. a
if(count==N)
7 g. F) V; q! h _5 v1 y {p->flag=0; P/ x3 _6 ?2 `9 Z
count=0;
+ O3 e$ P6 [9 r% n sum++;}
1 T" {* ~6 [! ~7 S0 C if(sum==M-1)
" Z4 L: p S/ }8 l break;+ {7 n5 \$ r* ^; M! y; F' f7 s( n0 i
p=p->next;( Q/ y4 V. s9 j* M* F
}
7 n4 E5 @# H+ W4 m3 P p=
* o1 W2 _, _7 z9 {" x head;! B) `( J3 L" Z1 a+ ]7 \# d- W
for(i=1;i<=M;i++)
% L+ s1 S2 T9 J; t { if(p->flag==1)3 q2 w) h( c2 J: ~0 f1 O" @0 `
printf("\t%d",p->number);
0 \' X) C& L; J5 l p=p->next;9 |% {" f" ~# R
}- p9 B! {! g/ L7 r: k
2 n3 A+ c% x) Y0 \
0 \4 ]5 h! K* X; f% p/ D- `
1 a# c$ \* u) l} * U5 H* ]& z8 z' W
第二种方法:数组( V/ t; n: _9 ~$ {; q/ v6 @2 v) o
#include<stdio.h>
M# r0 i9 ?3 p0 V' D$ }4 u4 H M#define M 8! B+ t& a+ I% _" r
struct monkey
: \, b9 w' ?" k1 T# v. v9 V{int number;
2 j3 ?7 `* l. f, [# l1 tint nextp;
' h/ z: F; Q" z2 d, X}link[M+1];
+ M3 g7 X# V3 \2 j
$ M3 z' P8 F! A' p/ {9 z0 cvoid main()7 R* k+ {7 W( D8 X( Y
{int i,count,h;
: c$ L, y. R/ d3 V& T$ yfor(i=1;i<=M;i++)" j/ r7 I9 T/ ?% d0 Y& W
{ if(i==M)$ y0 J& M. J& w, F/ _' p! V
link.nextp=1;- q$ r$ f; Y. x/ u3 h
else, s7 J$ _! ^+ S; p: z v( s/ p
link.nextp=i+1;
9 c; |* E+ |" [4 I- W5 F6 G ^# \ link.number=i;0 w( ]6 A& D4 W7 A+ T* @# f
}. S% G" V! K% a, l1 Z& B! y$ s" t
printf("\n");' ?& |, W! p0 p, ^& h( c1 C
count=0;, n8 b! T# `4 t* n. T; C8 w
h=M;4 g) `& M* g% @' ?% t8 S
printf("依次退出的猴子: \n");4 F! Z7 w: _& u* U# i. N
while(count<M-1)+ O$ z$ J3 C4 |" F2 a
{i=0;
! R, N- r+ J9 `+ K4 uwhile(i!=3)* m2 B( m) r7 b- j% c: ], s+ F# r
{ h=link[h].nextp;
8 `% d, P& r. S if(link[h].number)6 @/ M1 A& j# F# W- [( b5 q7 F
i++;}7 j/ n& ~, g) D2 r
+ n0 y/ }& {* W
printf("%4d",link[h].number);+ g5 w& j1 E q+ T, S; K
link[h].number=0;
: D/ [0 A7 V9 T* z1 K. ?count++;
2 O$ d+ Q& Y, M0 x6 ?3 u3 F}( [1 i( n5 ~% E$ N/ p% o! P; n
; o) R! [/ y# t, O+ ?' E/ N+ Mprintf("\n大王是:");( T" f) l% D3 e
for(i=1;i<=M;i++)1 x1 e' p- G2 D8 Z5 z' ~9 P/ \ {7 }
if(link.number)- H" u, Q7 I' P' C6 V0 t
printf("%3d\n",link.number);
3 u& L6 r: q+ K- Y/ |, a4 o/ i3 t& C7 |- t$ r4 k% o
# D2 {/ F( D2 v0 }# Y& m}
6 A K& T( E/ A9 K9 {3 a+ ~1 H' d第三种是普通方法for循环
1 {& ^8 f" J' J$ r#include<stdio.h>
( m& J. @# {" }# uvoid main()! B- E) L9 g6 `. g0 G$ L5 v
{ int i,k,m,n,num[50],q,*p;
. T) s; C5 M* w7 J0 d clrscr();* d% o5 q2 D5 Q1 i' D& O1 I+ Y
printf("input number of person: n=");
% N c; d! G( C* D( r scanf("%d",&n);
* g- |5 k/ E& \- ^* \printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只* Z9 M) ^7 a1 A, l; e e
scanf("%d",&q);8 C0 e ?2 g$ e9 z
p=num;
N f+ H. g) J: S for(i=0;i<n;i++)
4 T5 E+ G/ V Z& v% V *(p+i)=i+1;
3 t) P+ G% j+ K3 } i=0;0 i( i6 m% c( Y) V
k=0;9 \+ p; t }7 W3 f% f% v
m=0;
& }) W& e/ u y5 [! `5 o1 C5 C while(m<n-1)- H" \( m! a! M6 g
{if(*(p+i)!=0) k++;
0 { J4 s' G8 _1 q if(k==q)
2 l; ^: w5 @9 S2 z5 M9 w { *(p+i)=0;
, M- n% f; U/ F" s6 M1 ^; G9 r6 o z/ e k=0;
8 |+ p7 e& E5 p( t# k! ~4 O m++;
# u5 T' I& W! d* h: o }
* ~# P: e: [3 p6 g i++;
3 v+ w4 R& K8 A* B if(i==n)i=0;
' H+ k6 I/ h, A: ~5 b# G }: u: m+ l! k) z/ x4 ~% p
while(*p==0)p++;
! Y9 X# f- p6 g$ ?: U1 C6 Q) D. q printf("The last one is NO:%d\n",*p);! ]4 a B$ P) j. ]9 ~7 A
getch();
?! b2 S" C! y( S H5 n: f9 J9 Y9 ]$ {( w$ o2 t* V u+ T
} |
|