|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
Q! m6 Y; F' R2 O2 U/ K这几天我在忙着编一个问题,我用了一种方法编出来!
, i0 f, N: l; k( [7 M) S但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!, e" Q+ E* }3 b; z( |4 O
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
! j( Y3 @% w5 Y( |( R, w; P/ D4 g. G- J( b; G& A- e
?5 p0 b z ^. @ 题目
/ Y( }- U2 I4 _山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
9 z/ ]5 ~: n7 P第一种方法:利用循环链表
# t2 r# j6 `3 e$ q#include<stdio.h>
" s8 W, l+ f- J1 C3 O#include<malloc.h>
( a& o* i/ ]( j! L& D#define M 8 //共有8只猴子4 m5 i P. B1 i3 B
#define N 3 //数到3只时退出第三只' @% C! n) B9 d
typedef struct monkey
; O& l: n) \* r1 T6 S) P( |8 i{int number;
4 ~* o) O3 V" g; v) B# e4 vint flag;
( z9 K/ D( Z: m; Q( {3 gstruct monkey* next;
6 L( z7 _2 I v}MONKEY;8 E `- h: [+ ]! d
main()! E Q p, E( l2 \! y! i. V8 T
{ MONKEY *head=NULL,*p,*s;9 R& M3 ^* w, P
int i,sum=0,count=0;' p0 n W. V: e ~2 b+ D+ N, [0 N
clrscr(); //清屏' X* J& X% _7 j: K7 ]" V
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存: q) b7 G- ]/ p$ |% S" r0 k
p->number=1;p->flag=1;
4 D( H3 `( _) v' \+ Z p->next=head;2 O/ c& X$ A" O }6 E# k" U b" n
head=p;% a+ j; U) N3 ]. h: d" _1 U6 G
for(i=2;i<=M;i++): m5 s+ T! z h3 U% W0 a2 ~
{ s=(MONKEY *)malloc(sizeof(MONKEY));% U( j& }8 W) ]
s->number=i;s->flag=1;
o' `7 U" V6 s s->next=head;
) o1 R% j+ m' [# U3 | p->next=s;p=p->next;; g% o+ @; E) d
}
8 e5 F" u& F9 Q4 [1 B5 j' R; s y8 c p=head;
$ E3 v) R) c6 i% @ for(;;)
. d/ e( @4 g$ z* U0 x! o {if(p->flag==1)
, v3 ?! }* v/ ` D count++;
! o6 N9 U d- H if(count==N); \1 j8 T1 N' \1 R, v
{p->flag=0;# l2 ~* ?* H/ [9 f3 G9 q
count=0;2 } c* {! V$ O0 M3 x- Z
sum++;}2 _3 b" x) _2 V: O P
if(sum==M-1)- d, _* n( B j1 T1 @; b: A
break;; Q/ R$ f$ Y( H4 I. X6 F4 a3 I
p=p->next;
6 d1 a, h8 `7 I1 T( I) s7 c+ m }7 x. j9 c6 e5 [7 X. O' N: I
p=
: D) x2 K8 M0 _# l0 l: B0 N* ]) U head;+ |9 y& ~" i2 J- l/ r2 C
for(i=1;i<=M;i++), h2 I9 S7 G( P: Z2 j; u
{ if(p->flag==1); j0 X. r5 |& d# l. o
printf("\t%d",p->number);
3 c" ?# B! `7 l3 c( l p=p->next;
@# N9 t) w# ^- r r) h% T# k( n5 o }8 N [; i, G0 l* Y
/ f- E+ W- f3 {4 ?3 A/ w2 _9 D" b( w) b7 ]
1 h' l, _) k5 {, F- Z: _
}
/ w8 ?7 s6 P" Z第二种方法:数组
! ?6 }; H& N6 e9 F/ U$ w/ _#include<stdio.h>
5 N h3 B9 n U) ~0 F6 j#define M 8
: [7 I" B3 o# n7 x# Q# bstruct monkey9 }; o8 `5 ~& ^# x6 U
{int number;1 f2 w' V- c! b7 L" Z, k( Q
int nextp;1 p2 N t' i4 \
}link[M+1];
, e% S8 Y1 |& B7 x( ?, D, j; n5 F+ Q9 V I4 K, g( K
void main()
4 s0 v* X; a/ V* |! [; ]. ~, D. I) a( C{int i,count,h;6 H7 `0 I2 T% L' Q0 f
for(i=1;i<=M;i++)6 {9 V$ R- l- @- L! C. P# I
{ if(i==M); U \9 y3 R% y7 W3 v3 E
link[i].nextp=1;/ s; y$ H) b0 h' m( Q
else
8 n! I; Y' M3 N" j/ J( r9 | link[i].nextp=i+1;
6 N6 l: @: P) j' P0 c link[i].number=i;" l' w r% Q! S9 U
}6 h. @" h$ s( ?
printf("\n"); F( b: V$ D$ i' t" a
count=0;) e8 ?/ h; @1 S
h=M;
( l" k' s- p8 l% ~printf("依次退出的猴子: \n");+ P7 H1 E: a* K
while(count<M-1)
3 [! A, f$ i# e* J" Z. X{i=0;
, Z* E1 C- E5 B, xwhile(i!=3), ~# h _: v6 v" @% I3 i' w7 |2 f
{ h=link[h].nextp;- l0 L$ P4 ]6 c8 `
if(link[h].number)1 m8 T# o8 V; M$ x8 t- \
i++;}2 ]5 }- E5 E' D9 E. t2 E
\" M% n3 `9 ]* H; K( V9 h
printf("%4d",link[h].number);
/ K0 x9 w. h ?- s9 _% U5 _link[h].number=0;
) j" H! l9 U# E+ Q* x/ l% qcount++;
* c& P' c: q+ C5 h. E}4 u1 y: \ Z0 Z& {% w/ x! y
& M3 U7 N' I6 k5 l' R
printf("\n大王是:");
8 f2 f* p" e: n for(i=1;i<=M;i++)
% B2 |) B, L; c- R( i$ q$ Z if(link[i].number)
2 I* I; s) q: m! ?& C printf("%3d\n",link[i].number);- f/ R5 v$ L7 O+ c9 q" n# j
# ]/ g. v0 C# f2 N
n* b* Y1 D* f}
+ ~+ ]; a8 ?- X第三种是普通方法for循环( ]2 }4 P Z9 m/ g, O3 d8 d
#include<stdio.h>
7 C- l F: f. {, a0 Fvoid main()
5 m" }2 \" j2 _0 l8 y- R# {% B{ int i,k,m,n,num[50],q,*p;* J3 u: k; V& d% l: |
clrscr();7 A$ G8 @3 V) Q- } W
printf("input number of person: n=");- n$ v8 A+ n# n! u! I( I3 n
scanf("%d",&n);
+ L0 `3 x4 G+ e3 J; j$ \% hprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
4 Z+ ]" U& M0 A6 S* U scanf("%d",&q);
7 y( D) `6 b+ T5 P p=num;
1 m, B5 G( g1 h$ a. d0 V* j for(i=0;i<n;i++)
, ?, x- p- q) }( [ *(p+i)=i+1;9 J+ {) \2 y( S$ ^, h3 @ `
i=0;
6 N! c# s% v5 n6 d, u( ^8 x0 |: m k=0; F" x- b) L) b3 J ~* G
m=0;
$ q) ~) u- K0 b# G' [ while(m<n-1)) c& m$ l3 ~+ \1 G9 h: n
{if(*(p+i)!=0) k++;/ I; W8 L. Y. o. @8 A& }2 L
if(k==q)
$ c! B H1 x8 e( s4 x9 S { *(p+i)=0;+ W; {: k% n3 {9 x; Q
k=0;
2 L2 t8 l( D) h: z! F3 e2 l m++;
% \$ M( Z: M; a }- I% R4 |( C9 E* c
i++;
5 W3 v$ Y* X/ h3 H! u( } if(i==n)i=0;
& |5 u A/ s8 r6 O! ?3 r }
0 z( Z& L% Q! o3 B/ O' T" B while(*p==0)p++;, _' B$ W/ }; P
printf("The last one is NO:%d\n",*p);
! i5 b' T$ [7 Q* f getch();
8 ^" _4 L7 H) ?2 W
+ U- Y! b: o# x) G8 v6 X} |
|