|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!9 ^1 n6 [8 y7 w! u
这几天我在忙着编一个问题,我用了一种方法编出来!
/ g0 C- ^. Y) N( b: `) H9 r+ l但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!5 O5 e+ Q* q8 o5 I/ S( S9 ?
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 3 K4 {2 H. s; l
+ D' a @& J) [
4 |/ g2 F8 M. H/ S$ m
题目' O% e0 h& z# i9 l( i
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
# N0 k, @, u. x% H3 X& c: f第一种方法:利用循环链表1 X, m& m: E- t( N% D. N& q
#include<stdio.h>' v+ r# {& Z7 x5 j9 H- W: V2 C1 @. k
#include<malloc.h>+ j: x3 {# p# C9 n' u+ Q2 `4 E
#define M 8 //共有8只猴子% i0 x; R- W6 L6 A/ k' u' t
#define N 3 //数到3只时退出第三只
7 ]$ ^# r& e) c/ Ftypedef struct monkey5 G* f* V: @* J9 C# W2 o U7 t* _
{int number;& P% N. y R* o" D! o
int flag;
H, j! h, B' K7 o# C- e' I1 zstruct monkey* next;# o) t4 e/ U5 B/ V" I; q
}MONKEY;0 j8 Y" l: z; t ^
main()
4 M/ d/ v+ l& a2 _4 `; Z& `{ MONKEY *head=NULL,*p,*s;
, Q) y- P" X9 ? int i,sum=0,count=0;
" H6 f6 X/ p* P' Z2 Q ] clrscr(); //清屏
' e( K5 V; g Q3 i6 d2 v! a: z p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存8 |9 r: v" \! T j- j( F
p->number=1;p->flag=1;% |0 w. d( @1 |
p->next=head;6 V9 {6 v. v, J& |8 N+ M( I) }. g' \
head=p;
T, p& r, x: i3 ~- W for(i=2;i<=M;i++)
" y; T8 c/ }! j- ?* Y { s=(MONKEY *)malloc(sizeof(MONKEY));" R& X! S2 }' v
s->number=i;s->flag=1;
( j# X2 q' T3 N4 L7 D; O9 M s->next=head;
: i) l( E: u4 l" O( S p->next=s;p=p->next;
+ U& O/ x: K- w6 q( }7 A/ a q* |7 K }
8 m4 E9 w1 f( D: d) N- O$ O* w p=head;7 B$ k( f* G) g
for(;;)
1 Y: Z0 q! O! D& b( A, ~ {if(p->flag==1)
" B8 \, j* K) R# m, e" D& I count++;
/ L: h; g2 a! z if(count==N)
- t+ m( F/ G; y8 M* t {p->flag=0;
. r1 c( \( C n- c count=0;
6 d7 S3 z1 i' X$ ?6 ]' Z sum++;}0 P: C* v% j* |$ v. E+ M
if(sum==M-1)' o+ Y6 M5 ]3 v, `4 o/ K
break;
* G( c; s! N, v6 Q p=p->next;
2 Q) ]/ I8 E* {* U" h- n( w: g; O: J }
' R# \) t# P$ n5 f p=
1 ~6 x" y, H6 c) ]% @- A head;& X7 N! U4 v4 ^
for(i=1;i<=M;i++)0 B- }+ x/ d7 {) \$ l* [2 }
{ if(p->flag==1)
+ e- h, x! ?8 `( N/ r; X; Z2 q printf("\t%d",p->number);. u: O. y2 V: l2 b& V
p=p->next;
: _$ y% }2 l5 {) C" | H: n* w }" K' p& w/ I# `
; P9 T0 V% M4 j5 ]# l9 d
+ Q4 M9 W4 s' Y; I& }% K/ _$ p0 J+ M+ t
0 v) I: u5 Y' Y7 ^4 e( V$ i} 8 T+ d n( x5 W; ]( j
第二种方法:数组6 j& l: m+ [7 ~6 n$ e, b
#include<stdio.h>
( t9 J/ U1 E- |. S$ O8 W#define M 86 y' R; G' c( G& l7 G W) \
struct monkey/ j2 _6 R0 i& X) l; a( g! y' [
{int number;3 u4 B' w" t# l
int nextp; M) I. T! X- Y+ ?1 d/ i7 i4 z4 ]
}link[M+1];4 M2 m; q* T: X, v, m, J
, b; {/ W* a' a0 g3 Y+ o; Y' m/ u fvoid main()
; I& N( \' X$ D( X+ m{int i,count,h;% Q! M' N) q/ _. u
for(i=1;i<=M;i++)
6 M4 r. \5 N- j, i8 b{ if(i==M). _- i/ ]/ U6 K* H' L. R
link[i].nextp=1;) Q) U5 [! v/ D9 i* t, L
else# R* z; X' d6 o- _9 G! n
link[i].nextp=i+1;
& q- I: I% B+ c [ link[i].number=i;
) D# m& ^) a" e" H6 G}9 r' n6 I0 n) [5 i K
printf("\n");
1 N8 Y$ f7 }; x1 ccount=0;/ i. q' a8 ]: V) W7 H5 l( G
h=M;1 y9 P+ B7 N. P+ R
printf("依次退出的猴子: \n");4 |* h/ t, ?( |) d: F
while(count<M-1)
8 Z( Y# D% q" H' _{i=0;
9 F' B+ ~5 A1 q( zwhile(i!=3)% J6 o" I" x2 O7 {' T
{ h=link[h].nextp; `" D3 v$ ] S" @/ P
if(link[h].number)) @- v2 a s( b7 U
i++;}
/ a* R6 y! H. \/ d! j8 o @
: E& Z& J, B! ~! Wprintf("%4d",link[h].number);
9 ?' P3 { J" s/ V4 \7 ?! g! X; A4 Jlink[h].number=0;
8 o. @3 _( z \7 Pcount++;1 }. s* E* ?# w
}
1 L0 M3 W" z4 \# c
3 [2 k+ P( K" o' j! i3 M3 Oprintf("\n大王是:");! z Z2 ~/ {2 {/ D. a( Z, Q
for(i=1;i<=M;i++)3 K: e8 h) d) A' l$ U/ g8 A
if(link[i].number)
, t* {8 l8 I% O1 l printf("%3d\n",link[i].number);
# T( J2 a) M( }9 o# ?% H
! J* N4 W: k6 C: E
, }' L% U! w% i: Q! z( f+ u}
, }- r5 p: f( g7 E( Q; d第三种是普通方法for循环
' q+ X6 q6 |$ Z. s% ?* |#include<stdio.h>3 G, t' m5 i& a0 d
void main()
( [" D, T! H# r( _{ int i,k,m,n,num[50],q,*p;
/ y# P: K: \' P" @. W# g3 H clrscr();
4 u" a2 b: b/ l# g: k+ | printf("input number of person: n=");7 Q/ ~" w# h- X. t( J: {5 M
scanf("%d",&n);0 V) ^' h' e) g0 J
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
) N% x5 ~1 v8 }; f- h% O' F scanf("%d",&q);1 e# x& A( K9 r& B* ^/ ]; s5 Q% n" s
p=num;1 n3 m- l5 N; q1 M% r7 ~9 D
for(i=0;i<n;i++)
& g3 U/ q, z! ~9 o) V/ K7 u* T *(p+i)=i+1;7 y* q Q2 m: N4 b: b5 I% y+ F
i=0;& a) i7 M% Z A% a6 d7 W/ r- A
k=0;8 E! ~% K- u) I' S
m=0;
* P8 B7 V* S8 T4 I while(m<n-1)
6 e* N( p: ?* T' F3 s {if(*(p+i)!=0) k++;: _/ z& y) I5 Q2 h. T7 y
if(k==q)
4 Y- s- V8 l! i1 Q. k { *(p+i)=0;
$ L% H% L' n% ` k=0;: k) V* }+ L4 F) r) f
m++;, ^$ ]( U% ?. T7 D: `
}1 a) G% @6 w; K2 [( R. }
i++;
6 ^4 Y6 b: f6 j9 b( s. I! X if(i==n)i=0;4 w: ?; g) y6 `* z% V3 B
}4 n* x( Y4 \# y
while(*p==0)p++;! Q# q6 E* d' |) P5 w# u+ E, A
printf("The last one is NO:%d\n",*p);# Q: i. U5 k$ Z' \
getch();: Q3 `3 S8 E0 ?3 T
2 }3 D. E+ I8 R% a: G. _
} |
|