|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
7 }" \5 ~6 L" x: n+ \; H这几天我在忙着编一个问题,我用了一种方法编出来!
6 J+ _9 p$ I+ I: I' c3 d7 Q但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!7 m! g; c4 e8 e2 @6 p
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 6 K$ D* x% v) O2 [' j; P9 A q
8 }' f w: q7 q0 {6 N8 ]1 L% z' o$ _1 X' E) Q2 {! U; |; l8 J
题目
+ U9 F# c8 ^: U7 g; Y山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
% ]) X2 y4 c7 o第一种方法:利用循环链表( g2 r) N+ b* Q$ ]1 j6 P2 S' U
#include<stdio.h>6 I$ [. e& d& b Q; H' E
#include<malloc.h>
$ Y( B2 ~; x! F' o# i. F! ]#define M 8 //共有8只猴子
8 @; z. B1 ^6 A5 F#define N 3 //数到3只时退出第三只" t* A4 p) D. A/ H! C' V& o
typedef struct monkey
1 G0 q0 H- x; K; |{int number;0 q+ u+ ]2 R1 _ ~( ~
int flag; b- {3 V% k% J: X1 d
struct monkey* next;0 I# {0 X( T' K! d6 ~2 P2 B3 q
}MONKEY;
, w, D) {# l: e2 |main()
! l. Q# l" u* b; A5 C{ MONKEY *head=NULL,*p,*s;
% a% y8 a. I& F) w! C int i,sum=0,count=0;
1 w. Y* U- i$ b5 b clrscr(); //清屏+ E# H/ Q, q1 i6 q6 ?6 t) k3 T& H K
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存2 @. P% P1 G$ }; Y, m+ e" m( Q. f
p->number=1;p->flag=1;& ]0 I3 b. e$ F% W5 e$ u
p->next=head;4 R( P8 m" v# e' p5 G4 u0 x- ^- [' w
head=p;7 v7 d9 Z9 X/ K, m1 ~# H
for(i=2;i<=M;i++)
4 r! l- j/ A1 F6 ^; P { s=(MONKEY *)malloc(sizeof(MONKEY));
3 K- W) r9 @! u, C3 [: c1 S s->number=i;s->flag=1;* D% Q; D9 }6 {
s->next=head;$ G1 a% Z9 Z' b8 [- z6 e3 a
p->next=s;p=p->next;' F/ F: N# s* @0 R3 I( w
}
, [, b+ T1 J6 W' \! Q5 A2 O$ |1 l# \ p=head;
3 q: O' T: k0 F1 o4 s5 Q$ h5 h$ v for(;;)0 P/ S0 Y% y) ~
{if(p->flag==1)
N: S1 c1 X6 b t0 B count++;
1 w6 x6 e8 J( N7 m1 K: e if(count==N)
7 H) Y4 t! [8 w! J3 p {p->flag=0;& d: P, R9 A5 R! s% V9 g
count=0;4 J5 U4 X- d! T: P
sum++;}
" P/ T$ o& A7 G ~ if(sum==M-1)
4 J9 I/ g3 k: M break;7 k+ P: R& v7 _! @2 z" h4 F
p=p->next;1 h. t$ j) `# S" ^
}" B7 Q- A* R7 M# {7 B5 W# a
p=
" G! l7 v5 z4 I5 B head;
+ |# [$ g4 Q7 L for(i=1;i<=M;i++)
- B+ Y% }* |& U { if(p->flag==1)
6 y$ g4 X: g+ P( w$ v printf("\t%d",p->number);' j; R* {. u3 @ z
p=p->next;8 Q/ f* Y$ k# D
}
" C0 s. @0 k0 Q; T7 M$ }
; o* |9 J9 T5 S& K3 o ~& c- o' [, @# ^9 I$ {. v& `
" T( F( a; y& H D0 l3 g} , c; T" p+ ^9 }0 G" D ~
第二种方法:数组
( b* A# V, h2 c; b#include<stdio.h>0 Z4 r9 F2 f0 h; B i
#define M 8
+ y+ s y* A2 A& `1 c$ n% tstruct monkey- N! V/ e+ D2 |- C( K
{int number;
6 }2 r/ _# [5 J X3 ]! `int nextp;
+ f1 Q( n& F3 W9 W5 @; f}link[M+1];
( S5 u( B% L; ]' S, D* d8 I* @ M! ^
void main()
( N& M1 M, [! f/ r5 R{int i,count,h;
3 V. Y$ l5 `. x& A7 w& afor(i=1;i<=M;i++)" G1 o0 M, p7 ?5 X
{ if(i==M) \0 g7 B/ R. Q+ s
link[i].nextp=1;. W3 T" h6 h" R+ d' c" g0 i
else& Z) V( h) G1 [3 V) H7 c
link[i].nextp=i+1;1 e$ u& A& ^: D! I- s6 J1 ?
link[i].number=i;6 ~- D3 `* J+ N& j$ K2 Y
}
# \2 s6 D2 p5 [ s$ b( _printf("\n");
: W' {1 W8 h; y8 Ncount=0;
; e: T6 I+ O( ~* w8 I# m6 Ih=M;
' t+ D# Z# ^1 y9 _5 M9 h) f9 E! M eprintf("依次退出的猴子: \n");
% x# }2 R; s* k; A( |2 owhile(count<M-1)
6 Y z1 X& {3 d! i5 S{i=0;" e2 @2 f n% l0 ?1 k5 O7 [( O
while(i!=3)
/ k3 i: \3 K9 K% H6 o& w{ h=link[h].nextp;+ s6 H& }- M- w) D1 C
if(link[h].number)8 a6 q9 L- |8 J- q1 M( S& S" C% A7 L
i++;}
8 D6 S: j0 W W" S W/ P
$ [# S5 E2 V! d& l* j% `printf("%4d",link[h].number);3 s6 V* C; i9 |+ X) h* K2 y
link[h].number=0;0 G: y9 D3 A. Y) |% g
count++;2 H1 j$ Y1 F$ ]' {& u# e
}
3 C) M, V6 t4 H
3 l) H a; c$ Y4 Z& ]printf("\n大王是:");) H" }( c- ?, B h6 m* C
for(i=1;i<=M;i++)
) f! a* C. B, v if(link[i].number)$ J* ?" y3 c5 u9 E! `: E
printf("%3d\n",link[i].number);. _, |+ n0 [6 G
' t5 W% ~ n$ M' N5 U/ R. [
3 E- M3 \% Z: r- v2 T5 M y0 F
}
; T: `6 x% V" E [, R% R# a第三种是普通方法for循环4 g4 s# d* o! T- i1 {2 s( m5 |
#include<stdio.h>. r( g! I. L! c8 _
void main() t, f8 W$ |. ?5 y0 a q
{ int i,k,m,n,num[50],q,*p;( E! V/ |$ ~1 g) P k* {1 u
clrscr();" @1 |$ z* q3 F Q5 n
printf("input number of person: n=");
$ o+ h2 U" z5 g: k* k* T scanf("%d",&n);
# o/ ^4 |7 W+ Y0 e; aprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
( L+ b J0 s$ ] p2 q7 k: I& ? scanf("%d",&q);
, @6 {1 e. y: {3 [; I9 h p=num;
( C( d! _4 x' r for(i=0;i<n;i++)
% W C3 R: ^# ^" t5 y, [, r# ] *(p+i)=i+1;% A. A, ?1 A: ?% Q, i# s- l% R8 I
i=0;# p+ _% a# X7 c1 k0 V) Z* O
k=0;8 b+ R0 y1 a O) J+ _
m=0;5 U' f5 |' E2 W7 N/ V6 E" j0 p; d
while(m<n-1)
. P! N8 k1 V: |$ Q9 n m' ` {if(*(p+i)!=0) k++;
* S0 D: H+ m! Y& v# z7 S if(k==q)
6 }, t- H# `! N) P+ r y { *(p+i)=0;0 P& m+ C- p; H. `+ [
k=0;
- y5 y7 f" l: ~" d4 t+ R m++;/ W, g2 J8 h4 ]1 _- q% ~
}
% C( Q$ b1 W' R$ C i++;
, K: J& Y3 z' Y: z+ V if(i==n)i=0;
# Y5 ^ v, o. I& L2 P! U }
9 N3 W* X* h: d: v while(*p==0)p++;
3 P2 `, y0 L, t k* ^, ~' @ printf("The last one is NO:%d\n",*p);
$ M8 x$ v: ?. n* r% `5 m getch();% m) Z+ ~- O+ ]# K8 d5 |) @( e
1 f# Q9 x+ q) {} |
|