|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!1 F6 d, P$ U; P& i4 k
这几天我在忙着编一个问题,我用了一种方法编出来!
+ Y( N! n" L5 }7 S/ C# O6 L但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!/ [8 v. h: h$ u1 d1 p; T$ g8 v
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
$ Z7 T) g6 M! S9 h7 @/ u' L+ W" x& o3 r4 Z$ y% u
. N1 ]) M x2 R2 R% \
题目9 L2 V# ~" ~4 \+ Q" D$ D9 N
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。% _+ ^) n( S }$ G% ]2 P
第一种方法:利用循环链表
: [) ]: c5 d( h6 O#include<stdio.h>/ m6 b# r; ]( R% @ Z+ G, m0 g
#include<malloc.h>
& k: x8 ~9 }+ ^. ^" o H: x#define M 8 //共有8只猴子
0 e+ B/ }! c) w5 H#define N 3 //数到3只时退出第三只
; o& K }3 q. O% [0 g( h8 z! Etypedef struct monkey
2 P1 F" `& I- _' I{int number;' [, W" r2 n2 o5 w% X# s; E; o' j
int flag;6 T( U0 H) f& O. z' N) v
struct monkey* next;
/ e* D' Z5 [: u* P/ J [}MONKEY;
: u: o! C3 S* y) Qmain(); \% C: g. d" _: v0 P
{ MONKEY *head=NULL,*p,*s;
p( z' H7 R3 u; h0 f7 \ int i,sum=0,count=0;
$ m; H, p! K* C6 \2 r, Q! Q$ U0 A clrscr(); //清屏) v- I4 n% l5 o5 P8 p6 U( A, r; f
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
4 v. _1 {8 ]3 f2 j- Q p->number=1;p->flag=1;
8 t: i9 E, D( s p->next=head;" H3 R0 A3 V0 r5 b: @' [1 u- _
head=p;
- \' r2 a w! N2 [9 o for(i=2;i<=M;i++)
. n) {/ v6 W- x* m, i { s=(MONKEY *)malloc(sizeof(MONKEY));* z: `4 F' N# ]1 t+ q
s->number=i;s->flag=1;
4 T/ g- G% a. d6 l1 G9 b$ N( M( _7 w s->next=head;
2 Z4 U. g6 u) \. {$ A$ H! }4 j. r( l A p->next=s;p=p->next;$ A9 o, R) k# S! h; Z0 \, x9 m
}
: ~* R4 V# p: r3 _1 m! T p=head;) Z* f8 P3 n" H v, m& t$ i3 ]
for(;;)* `- p2 }4 B- G! H& G
{if(p->flag==1)" n9 S9 ^, w* K6 }) U, V3 R
count++;- @0 b: ~" D7 H7 P$ i
if(count==N): l) w4 r6 @! K1 I9 z
{p->flag=0;/ D# P+ |% w& s# E p8 n
count=0;" z, Q- ~# \( ~4 Y9 y5 \2 Y
sum++;}% `# m- G3 m2 t) E
if(sum==M-1)
: j, ^/ z, M8 C1 J break;
" S! U5 k* t7 j h' c6 a' _3 x p=p->next;
5 J% G0 P6 V3 @' E4 h) R/ v }" `9 [" r- _' d+ R. f# K! f
p=: _6 E, K! c6 ~
head;0 T6 x h8 |# }/ } |
for(i=1;i<=M;i++)8 r1 g5 t( N* o& D# G
{ if(p->flag==1)& H9 `* I" B s6 c
printf("\t%d",p->number);1 e0 s. n; |" s5 c1 Y
p=p->next;
7 B1 B; A; t: ^5 U }7 d+ ]" n. y- D( |$ a
- t% H+ `0 R. G+ y& G+ \; n+ s! K" g
3 `$ j2 s7 @# J! g2 b( R4 \/ B0 l7 k- }
} " v) @) o- s6 K. A8 K
第二种方法:数组
* q+ g: A6 d C }0 Z#include<stdio.h>% r) n7 O6 R _$ T6 G0 I
#define M 8$ ^: V b# f5 A9 S7 \
struct monkey
$ T" m+ E/ f) j7 w{int number;- m% ]. t1 f- t# Q+ @8 W3 q
int nextp;- w$ ?+ P! g) V7 I% D, f! Y, v7 n
}link[M+1];# B3 }- G% e' R/ S9 x, M2 M# W2 K& {
; X+ O; R, n& D- ]) Ivoid main()
/ f' M6 F" ?! R2 `" M2 m8 I! R{int i,count,h;
7 g& E/ |. q. ^0 v4 B7 m2 E3 efor(i=1;i<=M;i++)
! p Q/ G: h+ r0 Y( s{ if(i==M)6 [# k, M1 |" o5 }
link[i].nextp=1;
$ }. [6 y! }, s else# B1 T4 z& b4 R- a: }% n
link[i].nextp=i+1;
. Y8 k$ e" M, E Z% n# C% h6 F" {. V link[i].number=i;* w# z3 Z- z+ D
}# t& Q& I, u* r6 j! ~( t1 h3 l
printf("\n");
/ h0 i3 W6 y% p8 [ t2 ^count=0;$ Q! q' e( s: p* e0 k: E
h=M;
/ E2 N) a+ I/ X2 [7 Xprintf("依次退出的猴子: \n");4 [/ t5 ~ f( W5 z
while(count<M-1)* v2 W: u& M4 v6 p" |
{i=0;
! `: K2 _& y# b, d3 r- Kwhile(i!=3)0 T, e' Y! U* i4 \" @
{ h=link[h].nextp;) I( c0 x" O _6 g. w% {3 \
if(link[h].number)
& j; a! I0 G5 \* z- m% s8 A i++;}
1 W: p2 X4 K. W9 |3 s. _
9 w; h. ?$ m- Aprintf("%4d",link[h].number);# j4 z8 k7 ~3 D, b. _
link[h].number=0;
& X& Y9 s4 n+ Gcount++;; Q* D' P. S! [. n: t! f
}6 x' y/ f. G6 C. f1 f2 v1 l
% x6 s; Z! O8 V' Jprintf("\n大王是:");
+ c/ [' z% ?3 Z& D for(i=1;i<=M;i++), h0 r5 X+ ^9 e- Q4 Y- N
if(link[i].number)
3 D; ^* `4 E" J1 M' _5 M printf("%3d\n",link[i].number);4 I5 h/ T6 f, o, R' _
% d0 L( C3 A, A& f( N) y9 \' ^: |, r* _! R1 X3 X
} / [! x- m/ q8 B* q! V5 ^0 n
第三种是普通方法for循环
/ O7 W1 ]8 c3 Q* g#include<stdio.h>" ]0 [% u( @3 j8 |9 }
void main()4 j+ K2 y" j2 W s
{ int i,k,m,n,num[50],q,*p;- U8 x7 B$ v& _! ?( W' i
clrscr();0 O( R; }$ i* q4 r8 f& T, s5 P
printf("input number of person: n=");) X# @% r8 h! w! Y8 M" O/ _
scanf("%d",&n);
+ Q+ {+ M" M5 y4 mprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
4 h1 ~( D9 J, r V scanf("%d",&q);
Q0 d& ^, R( |- B p=num;0 }7 d/ a9 K" ]
for(i=0;i<n;i++) h& L) l8 L1 [, d8 U |9 d, {; D- h/ y( K
*(p+i)=i+1;# h9 X6 k# [; `$ |! K5 @% [6 e
i=0;; {7 y9 w+ E) E; j, |5 R
k=0;
! d3 j o7 b. r) W m=0;
4 t# t1 N- ^" W9 O) ^8 s) y while(m<n-1)6 f, |' ?( H1 r+ }( Y% R! m
{if(*(p+i)!=0) k++;7 {" ^$ b! J/ [
if(k==q)
5 n9 Y, U& H3 s% k9 q/ J { *(p+i)=0;$ S) r. p/ Q: q
k=0;
3 L. C: @7 _# D m++;
8 x N7 @/ n3 \* i i6 O& x9 T5 Y }
0 z3 g( V* O* L4 K2 { i++; A4 O! ^- X1 v8 X
if(i==n)i=0;
8 k/ ?: A4 }6 A; l& t" `: n }
0 G7 r/ k1 K4 I4 V8 p. r6 t while(*p==0)p++;
+ X: M7 V3 l- F0 N" ^# ^, x printf("The last one is NO:%d\n",*p);+ r; n5 x2 |8 v5 t. ]
getch();: B$ P( D) h: _! l% J+ h8 O+ r+ N3 E
# [9 z0 d# O4 J' A+ U, B# W# w' o9 V% R
} |
|