|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!( p ~" v5 p6 d/ v M% x* r
这几天我在忙着编一个问题,我用了一种方法编出来!, t1 Y$ `1 _/ v
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!! g" L' p' o/ R! }$ } D
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
9 |$ ]- r- A( G6 N+ x: o+ |6 I$ M* d- S% w( r- A. M% z
U+ W# ?. C- }0 r/ G5 R 题目
4 S+ H* ?( K: e- L+ K7 j5 `6 U山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。8 X) U, {; ]5 M8 x) P1 k& h# n; ^: q4 _
第一种方法:利用循环链表
% o+ a6 h" H, J1 c4 o0 O#include<stdio.h>3 j- _( }* K# U" X( g
#include<malloc.h>/ p6 A8 p5 l: E# u- d( n5 x/ d' q0 f- n2 F
#define M 8 //共有8只猴子
0 k* @4 X' V" D6 T#define N 3 //数到3只时退出第三只
% O" s, G# h& q( F& ztypedef struct monkey
% T* ?, H$ U3 Q# h( d{int number;
x3 S6 E) _9 l: t, d8 }! Eint flag;
: X6 ]- F3 v3 Z( O+ l9 M; ystruct monkey* next;
+ C0 X' W* I4 N! Y2 h$ ]; Q}MONKEY;
" A; @7 @* t3 N n6 m: \8 u- rmain()
& R$ i! J2 l) a4 \{ MONKEY *head=NULL,*p,*s;
7 w- j# l9 T3 r8 K int i,sum=0,count=0;2 J' z; ]% }* R# u' E
clrscr(); //清屏- ?6 s! N& X3 N5 N5 B/ \) Q
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存+ E6 L7 I, B4 o2 i9 h4 |, H& ?' L
p->number=1;p->flag=1;, X3 T7 }4 U7 D9 N+ w1 _9 U
p->next=head;+ w) l' T( x* U" V
head=p;+ P% i- o0 m* z) U' f' c' H
for(i=2;i<=M;i++)2 @* U) S$ e: ^& L5 S+ u \
{ s=(MONKEY *)malloc(sizeof(MONKEY));5 V+ d e( Q. i2 b* B
s->number=i;s->flag=1;
0 q# p- h6 C) R: E s->next=head;
& v4 I+ X q4 M$ b6 u" ] p->next=s;p=p->next;1 a. V3 L/ O7 ?& L
}' s+ k: \' l5 w/ b
p=head;/ r5 I5 G, R3 G. Z. z5 o
for(;;)! x+ V# ]/ w! p, E, z
{if(p->flag==1)" Y% w# p* o( [5 [; ^, x
count++;! Y6 u& m) R( C9 j
if(count==N)) F$ p- R* b. ~/ D/ r
{p->flag=0;
! M& g9 M* K n count=0;
6 [2 i* N/ c9 \7 g& m$ |! t sum++;}
' |2 Y2 ~3 l$ X: V if(sum==M-1). w) m T6 `: j& ?$ z. J
break;* i$ M; q, @2 M/ O& @
p=p->next;/ p, B7 }' Y6 ?9 [' f6 ^% H7 t
}
; Y C* U) ]- T2 G' E, P5 R$ v p=
; a$ _; w0 r; Y% }3 R, s0 g' F& E$ X head;4 _; }* M3 N( P* A# _. ?5 m
for(i=1;i<=M;i++); }2 _% S5 W: h/ e
{ if(p->flag==1)
1 @6 Y& ]8 P ^; b5 z1 \# {% @4 I& | printf("\t%d",p->number);
& H2 U Y7 W, R) h$ N p=p->next;+ I% ~$ t% B+ o3 n- m: C5 Q
}
8 h9 M3 p: v9 t# |- `% i
* m2 v+ ]4 g( O9 J
& Z3 L4 _- c, j
% }+ m' r( k6 Z' { O2 U# r/ A} " a' z; I, O5 a( O d
第二种方法:数组# }' x" S4 Z9 D7 Q- b( H2 y
#include<stdio.h>5 ^, Z7 T! D4 |1 _( C3 S: M. }# ^; f
#define M 8" m/ @/ v$ a4 t9 f$ v3 ?' ]
struct monkey+ Q9 N* ^2 P) e* u
{int number;
2 X' H- x* V9 |% @* v, n8 {* Tint nextp;
! X& L& j: y( w) c i# p5 k}link[M+1];- b) z( Z" O2 M) O
' k! m; H0 G* U* m8 N3 [4 Z( Q" bvoid main()
$ [6 z7 e8 B8 [{int i,count,h;
* E7 w' @3 e6 U+ M+ L7 Nfor(i=1;i<=M;i++)
& M1 q1 K- V. j+ N* @- R{ if(i==M)( B3 j. a2 I, D" D; w8 m% ^3 `! `
link.nextp=1;
4 L1 C: i# O0 u) l$ y else
. D! D& D0 n# H. w x8 P4 o' C7 L link.nextp=i+1;# l( z5 `+ t& _1 H
link.number=i;+ V( U a& V7 Q# K
}
) h" f4 [; ]& n1 Bprintf("\n");
+ h$ n6 p2 R, V+ lcount=0;
) ]+ V( J3 v. R2 }* a* Yh=M;% c8 u' `0 U/ W& A9 l; V
printf("依次退出的猴子: \n");
% F! h3 n" P$ [# Q# z2 dwhile(count<M-1)
' _! [; Q# U5 H# G{i=0;
" ~. h; I& G" I* Q- ^8 M! [while(i!=3)* P: ^# t6 |6 B: H1 b, u
{ h=link[h].nextp;* L* G5 E, N' x6 S2 V
if(link[h].number)
) N- {9 R1 H6 v! y$ ` i++;}% b, d6 C0 I5 ^- E
) d0 R9 Q: b. G9 t4 I' _printf("%4d",link[h].number);
3 {/ i; f6 b/ a9 c$ Flink[h].number=0;
: X8 S" E# F. e" G t2 L: kcount++;
4 `8 D, g% R. A}
7 ]' P. C. j3 N6 t
3 [, p7 n1 J: b( h2 y' ?2 D+ {printf("\n大王是:");. G( b% a8 t8 P& P
for(i=1;i<=M;i++)5 w0 W2 d- ^7 c, M
if(link.number)
, R& \: _9 [ w9 ^3 k/ k printf("%3d\n",link.number);, P7 E8 c: K/ P/ K+ j% F9 t) E
6 K# n2 T5 d' ? C
/ D$ v9 B( w) t1 e& }0 J7 W}
& k4 p4 U, o( ~& h, P- A" ^第三种是普通方法for循环' G* w! b, }* L5 U- M1 J
#include<stdio.h>
8 I( ]1 @" b1 {! P {5 Nvoid main()
9 E' J: ~' @& W' B{ int i,k,m,n,num[50],q,*p;0 R+ P4 D' J6 _( l% d
clrscr();6 p# a5 P4 f, v; |% \9 I& m
printf("input number of person: n=");" q! g2 g% L2 L3 X- | s
scanf("%d",&n);$ t( W7 D4 r9 w
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只0 |( g3 }# g6 d% G) B L% @& o
scanf("%d",&q); ?! b0 M6 x( B7 ] s
p=num;. z+ a# u1 \$ d+ ~/ p" p; i
for(i=0;i<n;i++)
, V, B4 H7 [$ W* y *(p+i)=i+1;
_. a! u8 x5 d/ j! H i=0;
( ?" T! R$ z2 C3 I. Y/ n, t! k k=0;
- X$ C' h4 P, C, v6 Q1 k: H3 R m=0;% F6 d5 q5 @9 D- X0 f
while(m<n-1)! M4 G+ {3 Z! F/ `% Y8 _8 l, z
{if(*(p+i)!=0) k++;5 v+ ~- \5 D- _" p: c% ]! R" a
if(k==q)7 ?* c" b8 G$ u l! }' J
{ *(p+i)=0; N; Z, c8 O9 e+ t/ l2 }! P
k=0; Q( @8 n% D( g* D& B3 I: V
m++;
7 I9 W. _2 b, P4 J: f }
3 d& \( f) u) y! M i++;7 ]) p5 \7 `8 i) X+ R6 u& j `
if(i==n)i=0;
% P+ W3 R" q0 b9 E) f }+ ~! W& C1 Z( ~; O
while(*p==0)p++;
* k! \* Q. }! J6 d/ ?$ a4 f: j2 M printf("The last one is NO:%d\n",*p);
]$ ?+ s$ p* F getch();
+ i' G- h# g7 m' A7 S! Y2 _$ Y/ W: ^; s2 M, B. U
} |
|