|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!! ?9 P1 t- z% D2 O7 T! R5 k$ N! j
这几天我在忙着编一个问题,我用了一种方法编出来!
' ~% @3 o- ~$ ]! C3 Y. C" ]但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!- Y. \' P6 F& U% J
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
, t8 `( p* y, V( K
% l( @" R8 W2 q3 s( p& V# f O
& o0 z, i2 B8 u- ?1 l- ?8 M 题目
/ L6 u2 H- A: y山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。6 |0 D0 m4 \# A+ m8 M7 ^
第一种方法:利用循环链表7 k% v) T+ p; T% y- ~
#include<stdio.h>
/ e F8 f2 {# V4 }#include<malloc.h>* N- o7 D `$ K8 L$ P: S8 N, H
#define M 8 //共有8只猴子, E$ r& e: `- d. o1 ?1 [, [3 A- `- T% G
#define N 3 //数到3只时退出第三只
! u$ U& k6 w2 ?1 Q, J* [* Ftypedef struct monkey
$ M) d( C7 s7 g& X2 s" J/ O) d{int number;9 y0 Z W3 o5 s, T) F
int flag;
2 W6 w3 g. D6 q+ Xstruct monkey* next;3 r7 ` {" h% w: a9 C
}MONKEY;" J" a [4 c! e' p
main()
, ? s% {( d% O# a8 g; {{ MONKEY *head=NULL,*p,*s;
; o. ?! }- p& W' W int i,sum=0,count=0;
+ u5 x; y9 `% g8 S: V# U& u clrscr(); //清屏& }2 f0 {9 T2 e" W7 @5 Z3 W3 S
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
* Z+ N1 r, _+ a9 M1 @ p->number=1;p->flag=1;( c( `. [- \; |3 P; x5 h
p->next=head;! i* l8 r0 v1 x. F& w6 L7 Y' S
head=p;, t1 c% g- j6 B7 j! G% G
for(i=2;i<=M;i++)
. s3 {( W6 l1 O+ X2 W6 w { s=(MONKEY *)malloc(sizeof(MONKEY));
0 D+ J7 f' ^6 \& q" M5 E3 q4 q5 b s->number=i;s->flag=1;
; z, L% v/ U- N3 e* d1 o9 u s->next=head;
1 L) X! X) d3 U1 a! }. Y p->next=s;p=p->next;5 H# [6 p9 r! w8 N* V& n7 g
}: U2 ^9 y# |( R r
p=head;! F. w; H6 T+ e( w5 M) a
for(;;)
9 @. K6 z* ~ d7 _ {if(p->flag==1)
; Q8 ?0 o/ R' [% n count++;
) B0 _' F. }: u3 n5 `9 B if(count==N), r! W" _% w$ k6 e* H
{p->flag=0;; h ~' Q& P! S: C) @: l" l
count=0;
* q8 _( C" G V! M* M1 L sum++;}6 A6 M' ?6 {5 `, O, X7 j. @
if(sum==M-1)1 p: L6 `+ M& S# z
break;
7 B6 p& d% ^: m$ p$ [/ r. F8 e p=p->next;
+ g7 W/ R# y3 Q( X& l }
8 V; g2 A) J( h) F. G p=: B6 O& N1 j' r
head;
' {; P I8 x! P, ^$ }5 H+ c. K for(i=1;i<=M;i++)4 L2 N/ l% q8 w9 Z, r3 T
{ if(p->flag==1)2 g) }, _* F4 k6 s+ E* \- D
printf("\t%d",p->number);
# D/ f( |- `( r+ D p=p->next;
0 O8 ]7 ]. J4 j( V }
" M/ {/ x+ n! f6 H; A0 e* \ ^$ M" ^$ [8 V
+ ?/ R/ D. t1 N: [3 v( d5 G
4 s7 h1 ^ x0 E} 5 P* E3 Z9 G d# b: j
第二种方法:数组
3 J, R* G0 n) j+ B#include<stdio.h>
. O7 C" }! y1 d* t4 E#define M 8) m2 k' a: c6 @
struct monkey
' q) O7 U W+ e8 p; K v% ^8 t{int number;: y/ b1 T1 R% \( m4 n0 L4 D
int nextp;/ `) \- T! e4 q5 B$ _: y1 _# ~
}link[M+1];
9 e3 t+ K9 ]- ?, \- E6 s* [9 m2 }; D' g0 a) z
void main()2 z) q- t$ B+ [8 A g5 z
{int i,count,h;& T* T4 C9 g) w) x
for(i=1;i<=M;i++)! Y' C" A A7 y' T; h1 y4 w
{ if(i==M)3 t% B& d9 ~# k/ F/ J5 r
link[i].nextp=1;
; |. ?& |: @% w% g) v& E else
8 O4 L! \5 I9 e: @- L: g link[i].nextp=i+1;
# s5 c/ E3 |& g& Z link[i].number=i;
5 @& S4 @) }0 @+ C0 K}: p+ T5 F, V2 \
printf("\n");& \. N4 S$ k1 z
count=0;/ e& j& R3 k2 P4 X/ i( ~. m
h=M;$ l1 b8 b+ i6 a1 h, n6 J! M, l" i
printf("依次退出的猴子: \n");$ y8 l; {7 C' @/ y( f+ w
while(count<M-1)
1 t9 {9 }9 Y3 T) k/ ^{i=0;) F* p" ~ j! i
while(i!=3)
/ m' u1 `% _9 s1 B; Q ^{ h=link[h].nextp;* k+ g. @- v# h1 U
if(link[h].number)
" p# {- W# ]0 `* _; C% [+ p i++;}
, B; Z( n9 {" e/ I1 g3 r" p9 b, d" Q/ a3 |) _1 z* v
printf("%4d",link[h].number);5 R8 g' ]2 X3 B& F0 k& J
link[h].number=0;
9 B, d; t1 Y( K0 S1 j) lcount++;. p5 j* r4 `* `" [) {& d
}
: E5 _3 W( _$ m9 N' Y1 ~. C9 J5 |: v% h! a y
printf("\n大王是:");0 A7 H+ w4 e& q7 r* Q# R
for(i=1;i<=M;i++)0 h2 P- W# l" B$ t: z
if(link[i].number)
5 c. z, W: V7 A% y$ k! D0 g printf("%3d\n",link[i].number);6 A: u1 p. C; b, p
4 o3 O2 l7 F; n
' M0 N# g: x; |; ~0 q M8 Q+ h
} 8 a; D- ~ ]: |
第三种是普通方法for循环) a/ ?0 i Q) |1 H& x
#include<stdio.h>
4 ?: \. Q1 _7 m$ lvoid main()% ]8 B) H2 K+ z
{ int i,k,m,n,num[50],q,*p;
5 B0 w* x" {! {$ B1 f t' n clrscr();& p2 y" F+ n" ~% l( F- m' B6 e
printf("input number of person: n=");
6 H: N) \+ ~, y8 S5 U2 E scanf("%d",&n);
; A* Q6 V9 N+ T7 m+ {$ |printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只( d4 O7 K6 ?8 [8 e! t$ u- g
scanf("%d",&q);5 l: \0 o0 K1 J( w
p=num;: B6 G! t" L( t$ N
for(i=0;i<n;i++)8 Q" Y# J( O, D: k
*(p+i)=i+1;$ w% s& Z, C B: X/ j
i=0;
$ T. q! v' y- d% G# t k=0;
* `4 n& ]( p. o+ F: ?) n3 C m=0;* D1 b( H* ?; q. R1 l1 H
while(m<n-1)6 F) s3 u$ k+ {7 F2 q$ k- F
{if(*(p+i)!=0) k++;- y0 t! _: \ k* r2 t+ V9 m
if(k==q)
4 P3 y7 l: ~5 m0 Z" Q; i9 W1 U { *(p+i)=0;
) X0 P7 N3 O/ c: K& Y# d k=0;: ^: v1 A% ~3 a0 [' O U7 S$ t
m++;
$ ^7 Z% U* ]: k- U }
$ T* s" ~7 |2 Z! `1 Y8 G i++;9 Z" |9 a, \2 B. I% V8 r
if(i==n)i=0;
- z% r& q: u3 B }' L& e, R6 f4 p3 `6 P
while(*p==0)p++;
; {$ j! U& X3 Y2 ^7 { R6 q printf("The last one is NO:%d\n",*p);* o" l* X: }! [3 k3 o# o5 P6 d0 d
getch();* ~6 K( l9 T1 ?. H! ]5 T
/ E4 i0 m$ r: Y
} |
|