|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
8 M3 M, c$ l6 s+ A% D- N* {这几天我在忙着编一个问题,我用了一种方法编出来!
! r; b v7 d# K但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!7 p. ?' ?% P& {# }
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
% [) b* S2 c% M* N) {* e6 m. u& Y! g
3 n$ f0 n; G; |; ?( A+ b7 M+ ? 题目 x8 ^9 B0 ]7 s
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
, V1 I6 s& R, m" A9 f/ ~5 q# `第一种方法:利用循环链表8 Y& Q S5 l8 ]* J
#include<stdio.h>
2 a1 E }, g( W6 y* }#include<malloc.h>( K9 A* A2 _* b) V6 U
#define M 8 //共有8只猴子7 Y. [, B7 `; x) q _4 f5 Y
#define N 3 //数到3只时退出第三只
. M0 X0 p, H ^! }+ e3 B; otypedef struct monkey
' N2 ~4 m& |9 |) O8 q: `, {{int number;0 s! E( c8 u; A8 ^
int flag;
% A( Y4 w" O- g% M1 E2 lstruct monkey* next;4 E5 r8 S! j8 S% u" m( F( _
}MONKEY;8 O7 s1 w5 s& R, L1 ]$ u, |1 Y
main()+ a( B% j. f9 B+ }# x }7 S
{ MONKEY *head=NULL,*p,*s;% E* O' z5 i- Z) A; I p: ^% O
int i,sum=0,count=0;
/ c+ y: V$ _# o; M% ` clrscr(); //清屏. ?, ?& X4 D9 {7 H8 x
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
% T: q: x4 [( [5 w! y p->number=1;p->flag=1;
- c: B6 h6 f1 D- g2 v p->next=head;
+ T5 d3 C f! M5 ^. r- q6 v head=p;$ k0 n) O2 X7 l, m
for(i=2;i<=M;i++)2 }7 e: G( }! N
{ s=(MONKEY *)malloc(sizeof(MONKEY));0 f# y5 m& v' r; ~5 M
s->number=i;s->flag=1;, q* i5 E9 y7 ?: v. F0 L/ z* y
s->next=head;
5 k: @; c# ~" h) t1 } p->next=s;p=p->next;! v/ o: i6 k F& U
}3 ]0 l: F3 N2 q4 N
p=head;
* ?6 C w( G- U8 ^ for(;;)
( [# L3 p) J1 \- O4 z {if(p->flag==1)
% W8 C$ B2 U" V: z count++;# ^ `7 S, {. T8 H
if(count==N)
* t! K) p$ ^$ Z$ W$ g6 D2 O+ D {p->flag=0;. b, l, m% f7 p. {
count=0;+ R" g, A/ u C1 `$ t5 `! W
sum++;}/ `, r( I. A0 Z* W7 v% h8 o% N
if(sum==M-1)
( H6 [& Q, m( h; A ] break;
: L' T, w6 `; c# b p=p->next;5 Y6 \& f6 M, S" o$ W# \
}; z, R c7 [4 u' l1 {
p=5 e2 n/ N; ^1 \4 c
head;
7 }" H/ z, a4 ^ j for(i=1;i<=M;i++)/ V+ v7 b7 x- |. j% I2 p& D) \" }
{ if(p->flag==1)/ \& E7 a0 D" ?6 N8 F
printf("\t%d",p->number);
P$ M# [$ _( t, A, o) k* R p=p->next;2 e0 F, G' Z) K4 X8 A
}3 E; d6 G9 v* _3 c& A9 s# r! X
' C8 G* b2 T/ b9 G r/ u
, Y. ?9 v6 M& D
. A4 ^/ Y8 H/ G, r# s! ~, |}
+ k- d7 Y6 \: t" s/ b. o第二种方法:数组
% _2 O" y4 ^* w* C5 Z0 {/ r6 _#include<stdio.h>' c8 `5 |, H! h
#define M 8
- ]: O; Z7 J- A1 ^4 tstruct monkey2 r8 D+ o# l$ ^# I( d
{int number;2 r$ f. w8 @+ K; P) J: R7 z
int nextp;8 ?+ {! L. W$ t- a
}link[M+1];
* m' f7 Y; T0 l, l3 e H: X# v
5 Q' r! u0 b( N$ X1 R- Tvoid main()# P0 s' [2 U# e: Z5 w6 G
{int i,count,h;- d) S1 v9 ?0 B. z! Q
for(i=1;i<=M;i++)5 k5 ^9 C2 D5 @, {
{ if(i==M)
3 \0 w3 N0 ~' T5 b link[i].nextp=1;
2 Z9 |& j% R) E2 z, L# ~ else
( @1 S* K6 M; W7 \! k link[i].nextp=i+1;7 g4 C! `4 z; e. W2 e1 Y6 C
link[i].number=i;& {2 z, n p' J1 {( G$ E
}
8 z: Z" p$ W9 k6 jprintf("\n");
O& l# V/ f7 F4 a& ]count=0;! b2 G- e) O( x: I
h=M;0 X* X/ z; Y! S! i# ?3 E
printf("依次退出的猴子: \n");0 T+ O0 A1 ?& `
while(count<M-1)5 w9 ^4 h( o9 W5 l
{i=0;
8 G6 R1 W0 @( N+ Y1 L# A( F) hwhile(i!=3)
6 V* F: P R0 p/ e5 k6 a{ h=link[h].nextp;' |2 ]7 S5 n7 ~5 C/ R
if(link[h].number)
! L8 }" e+ I+ S- v9 _' G i++;}
5 d; T* C1 i/ l# O9 q4 a9 g1 f3 Y3 E0 J
printf("%4d",link[h].number);
' W! A7 a2 j8 Mlink[h].number=0;
# h) a: `& I# D7 ?5 a, h% D- j: qcount++;9 B9 J5 ~: v( \ i$ G
}
/ l( d7 O4 e$ r$ Q9 \: y' d1 R; A5 Z! p6 j5 W! u3 \' g9 A! z
printf("\n大王是:");6 R% T$ D0 \3 l! j4 R5 f
for(i=1;i<=M;i++)1 E, j. l7 h2 w% S: X0 G9 Z
if(link[i].number)
6 @0 R0 y b/ o( `) y3 ^/ T printf("%3d\n",link[i].number);
8 m2 N5 h: Z& u, C& {1 N4 U: B7 p H0 W: @# A( `) F$ K
$ U R `7 P% m} 1 r- s3 K. a( E$ |0 U3 H e
第三种是普通方法for循环! e, g& K- }- |( O2 o0 q5 P, t6 |
#include<stdio.h>
6 S& J/ D$ w8 h- Lvoid main()
7 l& l$ @9 q, S1 H8 N9 ]# F{ int i,k,m,n,num[50],q,*p;
; G' w, T; |5 }5 d4 ] clrscr();
- Q. q3 w, P% I# c' R" J printf("input number of person: n=");8 V7 B3 `0 e: d: x1 E5 V
scanf("%d",&n);
& {( D( y9 K3 w5 Nprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只2 k& l s% @ E0 B
scanf("%d",&q);! ?" ]+ Z- x6 L: O }
p=num;
% K% ^$ H( K8 I+ V: }- \ for(i=0;i<n;i++)2 L4 L% H) r* {
*(p+i)=i+1;! D3 ?% u4 p2 H& N
i=0;
6 L* B1 Q9 v4 y/ |- q) ]* D* U k=0;
. y0 O1 M e- t; _0 c! s9 K m=0;
) F; q; c5 u$ {1 D: X while(m<n-1)
$ O% Q4 E P* n g9 a- b, ] {if(*(p+i)!=0) k++;# d+ I8 @* [# K8 `0 S* G" M- l
if(k==q)
R. v6 U+ x: I2 i0 K1 D( d3 L { *(p+i)=0;
) i* F5 [% y% W# i' e( y k=0;3 F' U$ g& Q4 w
m++;* S. L8 L, B i% T; x% ?% g
}, |! l0 t* L6 b# F+ t% S+ U# H7 }1 `
i++;
+ q/ d3 w/ h* y' Z9 z( S if(i==n)i=0;
' r) N" G& Y3 ^6 B) T }0 e, Y% N% j+ r. b- c+ y6 `( `
while(*p==0)p++;
, d: J5 X2 c0 h& u h7 }& d printf("The last one is NO:%d\n",*p);
& K7 A V' K" X8 }; A5 G+ L5 b getch();
! H1 E. o- A* p. {* z8 Z
' t0 r$ S1 t6 [3 y; L4 H} |
|