|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
×
大家好!
: D& ?" M$ t- t0 _这几天我在忙着编一个问题,我用了一种方法编出来!' `. z' T' B3 C' m( s6 O
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!2 q- p# V5 Q+ H- G
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
1 R* g* n% s% [. ?1 f% }
1 r3 F2 u" }; }' J* L+ I! P# t& G' V$ f
题目
1 z; [" h& P4 c2 S0 C# H# n! U山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
" C) ^6 B. S, O8 X6 s8 a5 {! \& P第一种方法:利用循环链表, S" C/ N0 x' E, T0 f
#include<stdio.h>
. S; G) @& ~& Q5 l5 F#include<malloc.h>
. ?8 e" r+ l/ c( R" Z- s#define M 8 //共有8只猴子
6 L" Y2 [6 [% h4 z#define N 3 //数到3只时退出第三只
& u! e- `. ]! @0 p4 w: ~9 C. N$ ^typedef struct monkey
4 c+ z0 a6 M; A7 z8 L( e% N e( \{int number;
+ Y: Y* ~0 W; k$ nint flag;
6 t% h3 r) O1 P2 ystruct monkey* next;
( ^" f, R, [$ i! O}MONKEY;
: ?6 g. V& I& p- l0 d8 Q5 bmain()
3 V% u/ Q) y: q{ MONKEY *head=NULL,*p,*s;
! |$ Y( z& [7 G3 ? int i,sum=0,count=0;
5 m: i5 O! k6 P7 H" G clrscr(); //清屏
/ E* W8 t0 W. G p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
* W5 D1 j1 h9 h- ^% w3 s% F p->number=1;p->flag=1;
: u) A7 b6 m, E V p->next=head;
" Q& O6 Y: K1 Q, t2 Z3 t% K head=p;5 ~$ n) E1 N+ r: }9 L1 S
for(i=2;i<=M;i++)
# t8 o' A7 Z9 R { s=(MONKEY *)malloc(sizeof(MONKEY));$ K9 m! @8 f% K* E% ~
s->number=i;s->flag=1;
) ]( P+ d, l% l0 ]; H s->next=head;7 J7 @. \3 U- X3 z4 r4 T
p->next=s;p=p->next;
- U( L* F# a; n }. \' Q0 I8 w1 h
p=head;4 x. f5 [, n7 F$ b9 {( E. B# T8 t
for(;;)# e7 e2 s: o% ~3 |6 r5 V* `
{if(p->flag==1)0 H# F, G& F6 ?$ g
count++;/ I5 A) A. q! f3 i# w% e
if(count==N); R/ X7 K4 f+ f/ e8 ^
{p->flag=0;
# v, @% X; c ], D Y; \5 @ count=0;- K& r7 R% O9 y
sum++;}
4 N: w) \* f4 Z8 T& t2 K$ p' \- i if(sum==M-1)" T: ]- k/ i! P0 \3 T
break;
# ?- C+ @+ P1 M# s% G9 g# N p=p->next;
& A q4 O! w5 x. N* ]! r }
* {1 ^5 T6 U2 Y* K& \ p=$ D9 o, }( ?& G8 W0 I! D3 T
head;, l3 w2 }! R C0 g
for(i=1;i<=M;i++)7 V2 `, i: c I3 j
{ if(p->flag==1)# @! p) l. `/ k- G
printf("\t%d",p->number);4 T& r' _$ _$ l9 O! ]! j
p=p->next;, C; b" ?; E" }: R* b
}+ e; {" j$ m" M2 H# I
4 }" y1 Y; P/ R) Q( Y
& }+ ]* C# T( _3 l0 |; A; r
3 |: w" D$ g1 {5 o3 _$ `6 z
}
2 @, x/ b0 {. @第二种方法:数组- O! i6 a% t4 c2 B8 V. B. X; p9 {
#include<stdio.h>; V0 o0 u* B I, ^. }! \# I
#define M 8# N: i! S5 s' W
struct monkey
3 f$ |9 ?0 F. q+ j, R{int number;1 C! j# B9 T! T
int nextp;7 q* [( U1 ^8 g- D
}link[M+1];
4 {/ V& a7 q2 x. W, E9 }1 P" J( K- n6 J+ d# C( K
void main()* ^( T+ V, n+ a1 N8 p9 V' E
{int i,count,h;
! c" m* [8 W/ z# ]: u1 T( Pfor(i=1;i<=M;i++)
^ f* ]% B0 k7 E% ]" X, Z' ^+ [: N! O{ if(i==M)
# i+ N5 T; O; C& Z( H9 y link.nextp=1;
, @/ c$ I- k* j X8 u8 ` else
: g3 [3 N5 n I7 V3 g* h link.nextp=i+1;
' h. R" g6 m2 R$ @* f; {' | link.number=i;
. T. ^3 Y0 ~5 Y% k+ R/ m}1 F& m. Z" n$ b: [$ @; d
printf("\n");) t8 `+ h. {; ]; e2 _* m
count=0;
& e) K. p1 N9 a5 Z0 Y# sh=M;0 [" ?1 t* E6 G8 i
printf("依次退出的猴子: \n");
; g0 X6 l# x! W% z/ N Ewhile(count<M-1)
# w7 x0 E# y% W{i=0;1 H2 {5 W" t0 A1 [7 ^$ o1 R3 ^
while(i!=3)
+ F: y) U7 |: ~) G{ h=link[h].nextp;
3 G0 h7 `$ K/ v if(link[h].number) d0 V' }7 C* D' W! \7 @: f
i++;}
]. i/ w, y+ A6 c) P# c, Q, `# z/ _% p: J# L
printf("%4d",link[h].number);
6 t- K. `9 H) j6 F2 { J6 S2 dlink[h].number=0;
$ ]+ v! I' j* u, i/ Lcount++;
/ k, V4 C7 P7 X3 T% \+ G) A}) r3 u" R K9 }+ L8 q$ W; F; r/ J
0 f5 `, G, Z1 [
printf("\n大王是:");
9 m" ~ n5 m$ J3 J. e/ F+ M# o for(i=1;i<=M;i++)7 M3 x% }! |( m$ d' i
if(link.number)
$ k5 I* A7 m D3 ~' Y+ ` printf("%3d\n",link.number);2 v* G8 U! d A7 c
; D; s) ]' U" e' E8 t- f& e* q& D" k9 T
} ' G; R& G% g% P( Y2 l$ g
第三种是普通方法for循环7 p$ z; g0 N3 D* ~* h7 o* H# v
#include<stdio.h>
" q n$ l. ~3 R7 \8 l6 y: pvoid main()3 `3 |1 X! Q; M1 ^$ v" u+ w
{ int i,k,m,n,num[50],q,*p;" k8 v' I2 ?9 \- P
clrscr();
B l0 n2 Q, @+ Q% e! y, i printf("input number of person: n=");
; v9 g9 n" C# r' L7 V4 J% @9 D scanf("%d",&n);
7 T- Z# ]9 x. S; t6 n5 Oprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只/ }* x3 O1 n6 j" V2 b/ [
scanf("%d",&q);/ B) f& w) y1 }9 u" R
p=num;3 ], K% _" I' K- J
for(i=0;i<n;i++)8 H5 F( K) W/ t
*(p+i)=i+1;$ d4 c( ~2 w8 h- A8 x. w
i=0;: } O! Q" b3 Z# N" ?2 E
k=0;
% x+ f, o% c$ Y, Q m=0;
) {$ f" j; O3 k0 \ while(m<n-1)
" }2 C# g7 K+ q' _7 I J3 A, q {if(*(p+i)!=0) k++;
0 U1 V! e* T# B; P: W8 K6 | if(k==q)
$ i* c& c3 @3 D1 b- D& L* I" ?* g { *(p+i)=0;, F M. v' v# I. r9 J. p
k=0;
4 q5 D$ G2 q, q. s: s: N7 \3 ~4 l4 t6 f m++;1 P w- T4 k+ h7 T. l! c
}8 P* q% ?" u' D
i++;+ h& X o6 k& c( {, c8 S
if(i==n)i=0;
& @: G3 s9 [9 f0 k }
- Y" @3 g; V& v+ b2 d9 l* Z while(*p==0)p++;, ~) d. H9 [( J& h9 T4 d' ^
printf("The last one is NO:%d\n",*p);
" ?8 J3 ~: A0 m2 n; ^3 n( q getch();% p& k) F% m% `9 X5 T
( G# n! o1 i5 K4 E% E# W
} |
|