|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
J; X+ _# T H. U V' ?这几天我在忙着编一个问题,我用了一种方法编出来!( [; X& V, \- {7 r
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!0 }0 U, n6 `0 X3 R8 R$ W# B
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
~4 e: V, ]# q9 S+ i
$ s) M" ]3 \( [# V( Q$ g, `9 J$ ~, R0 a/ _0 X+ \
题目4 y! F/ a; f6 ^2 Z/ P
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
# e& N0 U) p/ A8 y# T% l+ R1 V第一种方法:利用循环链表
8 |) S5 C q/ F( @5 p. @: R; I( z8 n {#include<stdio.h>5 K7 m$ h. a% _) A
#include<malloc.h>
\: }# }5 E1 P, ^1 b9 q7 f) ]/ @#define M 8 //共有8只猴子
. T$ q# A5 x/ l% N9 [ ^7 M#define N 3 //数到3只时退出第三只
+ ]! w1 _/ h2 C: Stypedef struct monkey% E! Q+ k7 Y" ]% S! N
{int number;% I0 P% L n% E1 z. ]* W
int flag;8 l, f' m+ O2 Q. s+ n r2 W6 v8 C7 }
struct monkey* next;0 |% s$ J+ f' Z% u8 k; `* ?5 L8 W
}MONKEY;$ _' O/ f. ~! P1 e$ b2 K( P
main()
; B- g4 j, v3 }/ O{ MONKEY *head=NULL,*p,*s;& ^. c4 ~. M1 h; `% O
int i,sum=0,count=0;
. `7 Q/ J$ s, [* B6 O clrscr(); //清屏% _' x' ]- N7 x
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
3 s! h2 U# r2 k1 f0 J p->number=1;p->flag=1;
e; `; u. {: C: ]4 X5 e p->next=head;
2 Y! g) ^1 R# {" V U- H head=p;8 ^: k$ W+ J& j
for(i=2;i<=M;i++)" D2 K) B) N5 V0 r( ]3 L: [) V( g
{ s=(MONKEY *)malloc(sizeof(MONKEY));
6 x4 ?; |8 L6 g' [6 w s->number=i;s->flag=1;
; |, S6 l) [& t; }, t3 w+ z7 \) q/ p s->next=head; ]* p9 `! i$ i! e) ~8 B
p->next=s;p=p->next;
3 P) V7 @5 s. f2 P$ R* c }
2 j1 H: ~2 Y3 l! |3 C R p=head;: P+ o: M6 d& o6 ?% ?# X6 g
for(;;)2 ?1 p- c3 ^6 a, a/ X: m1 ?: z7 O8 L
{if(p->flag==1)
+ L) A: b' o/ Y9 b1 h0 X( m; l count++;
4 i O$ x" F, i& Z3 Q if(count==N)) Q5 K: Q# M/ k' E
{p->flag=0;
- e' }9 v- n! \& D- N count=0;0 E. D- u3 v x! y, p7 V. g
sum++;}/ l6 f5 k& |; i. P. g+ c& ?
if(sum==M-1), i# f5 `3 M+ w+ Y' j- ~
break;
% [# J) {, S3 ]" K& L: x p=p->next;
, |$ b" G0 J3 W3 l! }7 _2 g* | }9 _$ \% ~- B; M4 J$ B4 G
p=' X0 @' U, f( d3 f
head;
$ Q v) i2 V. R for(i=1;i<=M;i++)
& T2 _' }$ j f' r- ~, y7 @ { if(p->flag==1)
' D+ C, O9 [1 l% i0 o printf("\t%d",p->number);& u( t/ W ^" r3 \! D/ p* u4 c6 e+ |
p=p->next;( b0 u0 Y; v5 j& l: u5 Z& I
}
{ k% ]: e# G7 r q6 o+ N2 ]) Q! b0 z) S/ g5 ?
6 ]6 f' a3 y0 a, ]
: p( M a1 E* U) W. F4 _9 X} % A7 s( i$ i, e5 C0 c
第二种方法:数组
4 J" @3 g2 T* R7 T#include<stdio.h>+ U# _" }* A8 j! Y' J, `
#define M 8
" G8 x" }9 H) r+ n) F6 G! \struct monkey, z t8 k p: q
{int number;$ C* \( _& f. x" \& c7 q* W( P
int nextp;0 a: J- n& D- x
}link[M+1];1 C$ @9 H7 l5 s% t
# [) i& j1 I; o6 F+ c- ^* s) k, _
void main()2 I; c* w3 j* p7 D A. E
{int i,count,h;
" X& E/ T9 X/ j) Y2 y" ~2 _6 m3 C( P( qfor(i=1;i<=M;i++)% Q4 u5 Q5 z" |8 v' S
{ if(i==M)! q; S( y9 C* F/ F. G, i
link[i].nextp=1;
8 _1 G. v8 |# c5 m v7 D1 u else
' r B2 z @$ g5 m3 ~# G link[i].nextp=i+1;
/ y( l( b3 N2 b* K& z4 e9 I link[i].number=i;: _/ Z2 U) y+ ]3 H! a4 g
}2 L$ _) O* A3 z! w2 B
printf("\n");% W$ Y! k/ ]6 o4 u1 u
count=0;
8 H+ c D, W' b) ]5 C0 E) s0 gh=M;5 U8 _5 @ K0 X9 u" J8 d& H6 u2 C
printf("依次退出的猴子: \n");
6 B v9 z4 c( D c# ^! ~. cwhile(count<M-1)5 Q( [8 r( x& t7 p1 L: O
{i=0;1 G k/ { j' l1 K3 v( J3 M
while(i!=3)
: M5 `9 T# h4 _3 z0 n{ h=link[h].nextp;
4 m: Y' [8 T! ]3 d. o4 a) a if(link[h].number)5 f) w$ F8 u! W ]; J$ E' t$ a
i++;}
$ a6 c& K4 t4 U0 I, e9 S( x- ^1 ?, G6 V1 k0 v
printf("%4d",link[h].number);
' s( t2 f( n1 r6 t. A/ Mlink[h].number=0;" b/ r" M6 V' N+ ^% n
count++;# K& V: o$ l3 g4 o+ \8 X
}9 E: B# w% h, ]/ I6 k
, Q8 O! c. F9 Eprintf("\n大王是:");
, f# M% P2 ?( z: @ for(i=1;i<=M;i++)$ | c" J1 N3 D! o. n- t3 y
if(link[i].number)
; q* q+ O. W8 l0 `* a8 O3 [ printf("%3d\n",link[i].number);
# l# U6 S% {6 ?3 u9 `2 F( T, D: C8 q; E
8 Z9 c) `( U% x2 H6 q; W* l6 |
} ' n9 i0 ?+ }) k! B3 T5 F
第三种是普通方法for循环
* h! Y+ e' g) Z/ p#include<stdio.h>
3 Y. I0 }- ]2 H/ T9 C( Vvoid main()+ B: D1 G f: S' a. c3 y4 ~
{ int i,k,m,n,num[50],q,*p;1 w. ~. K2 C1 K+ |
clrscr();
! G7 m# l; D* e; V& t8 r printf("input number of person: n=");' W* L3 p g( s# C' f1 R$ p
scanf("%d",&n);+ N& G3 u U) L: {8 P
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只( _" \5 S- X# R/ e$ X. T/ ?% m
scanf("%d",&q);
* w2 B! x$ V6 O K: W4 e) Y p=num;5 _. N" j( A- H% t3 k3 h
for(i=0;i<n;i++)
# I' o+ t/ C6 z/ B' { *(p+i)=i+1;, z, `7 q) ?. U! g% |' Y# ^
i=0;
: c3 H% d6 i6 l k=0;) o5 @8 A0 V1 O
m=0;0 U% n+ X+ e0 G/ Y: r+ D
while(m<n-1)+ _, J3 Q; t2 i3 A# ?# C$ b2 H
{if(*(p+i)!=0) k++;
; {6 c/ ^9 B/ q, B if(k==q)
5 }; ?) g" u' R { *(p+i)=0;
% i8 { b- K1 u( F* M/ \ k=0;4 U! P8 P4 m- @$ C
m++;! l, p1 f& c1 x' v, k; E+ \
}
6 a: F5 Q# p$ i+ ` i++;: s3 G3 p; M% A( @
if(i==n)i=0;
4 O1 z9 b# V: r }
4 ?* X3 L6 a6 h: h3 p: H while(*p==0)p++;0 e s6 f+ W2 I. `
printf("The last one is NO:%d\n",*p);( \5 Q/ k' K& p8 ]* G
getch();
8 w$ j; W6 U8 Y4 r& n6 K; b) r& O8 W% L" Y, d( A0 k0 @
} |
|