|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
) f6 m+ r& o$ s7 G2 X4 N2 ~这几天我在忙着编一个问题,我用了一种方法编出来!
& U7 q5 o, Z5 e! {但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
) {# O' s% T! u* u6 p注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 1 s4 {0 F6 ~) ?3 U$ [ N% j+ Y
& E1 w- R8 A. |; I" a9 _/ V. _( n5 C* C K
题目) @" @5 P5 \" e& X
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
' E/ { u4 T$ h; ?0 [第一种方法:利用循环链表# D7 K! Y+ H4 X9 c8 F% K
#include<stdio.h>: g5 W% Q& A: N0 |8 b+ q
#include<malloc.h>
1 n2 N5 c" D8 |#define M 8 //共有8只猴子
% A0 J! }) X5 i- P/ ~7 u" p#define N 3 //数到3只时退出第三只& t0 z$ I1 v. I4 u8 f& S: q& k
typedef struct monkey s6 q c2 K9 V# Y
{int number;8 ~5 ^& t! f' Y
int flag;
- |5 Y+ J, X9 E0 q0 Xstruct monkey* next;/ J" y) O; x, G! I9 _" K! u8 N
}MONKEY;
$ @0 \2 K( c% o/ pmain()
y6 R& V5 Y5 P$ k{ MONKEY *head=NULL,*p,*s;9 G* d' W2 ~5 |4 Z1 c) |
int i,sum=0,count=0;
9 Z9 X0 ~) J/ ^. t5 m clrscr(); //清屏- V% R$ h4 Q' c8 a2 P! c1 z7 {
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存) l/ R4 r; {: L q* k9 _
p->number=1;p->flag=1;# |5 s$ l0 R5 s$ \
p->next=head;
* ~8 E/ }0 Z( ~4 m% P head=p;
4 \: J$ m; }" d) E for(i=2;i<=M;i++)
% |. m. z, A8 @, c/ L. Z { s=(MONKEY *)malloc(sizeof(MONKEY));
+ b6 X2 @0 o& P i+ { s->number=i;s->flag=1;
% k- e3 h0 q, S [4 |# E" \ s->next=head;, h! G: H* R6 T0 g+ Z; E; n- L
p->next=s;p=p->next;$ L& Y. ]/ d9 T# g9 z
}: O( I" N3 n9 r& g# {
p=head;
) _4 s7 v0 a9 `: p/ c6 F for(;;) E8 ]1 ^- o5 ^- r* L% T( @3 o: W
{if(p->flag==1) b: F0 i8 s6 s! ?& H. _' z( K
count++;
) F' f# ~6 V6 ]4 G) P; L if(count==N) o9 k3 }7 E( Y( w
{p->flag=0;3 a6 B/ w# V; l2 E6 N! p
count=0;
W# ~- K; T% H: z* h$ [) P# A1 k, b sum++;}
- [* m8 I: f4 ^- Z H if(sum==M-1)
3 O6 z6 K" @# B2 K6 A c break;
. y+ b9 Y5 L' s$ U5 r% N p=p->next;, `. h# L5 E* L* G5 s
}) b1 s/ C) g1 s& ~0 j# h8 ~
p=0 h" c% H8 f: Q9 J' ?* q% y
head;
( b7 _) {# `6 k8 O; D! p6 M9 A for(i=1;i<=M;i++)1 y( X. A/ I6 {! o |8 L
{ if(p->flag==1)$ z% a% @( E# `& M& O9 Z
printf("\t%d",p->number);
1 S& y* n7 @* b0 {2 p p=p->next;
! W* }! o5 J8 d }" i5 F# J( W. Z
+ N/ O% _' U( y! h3 {- ]# g0 N* r2 D' l9 O
( G/ I' a# M4 y" J# d
} & V: a$ F9 n( z# }6 K9 r
第二种方法:数组! O7 y. S5 M }
#include<stdio.h>
! C L4 W1 p6 G#define M 8
! T8 B) ~* x$ v1 l( R4 C: a3 lstruct monkey
! L |* N. [# n" b- f{int number;
! y2 U; H: C' h( F) Zint nextp;0 g: C" F* V8 G# x
}link[M+1];- r% j! l) }" i) C# w0 `
) {+ O9 V% K, e& P( {1 _
void main()
( m4 W6 n E! B9 w T{int i,count,h;
2 G: F' b6 c4 X; i0 ^for(i=1;i<=M;i++)
0 @/ d/ |* c1 ?# D( ]{ if(i==M)
; }4 b X5 O0 V# x6 g" k7 ~ link[i].nextp=1;
9 K6 J# j) ^% O% P: f/ C/ Q/ w else
) D4 k" O5 v' ]! o& ~ link[i].nextp=i+1;5 ?/ H9 ^1 T# q) u" N
link[i].number=i;
4 f8 X1 {$ f% p# Z& c! V}# W3 s$ n0 L$ J. ~' s. F; l# n
printf("\n");0 g* S4 K* N- g" o) N0 c
count=0;
2 l3 O C/ L6 A7 R9 yh=M;
4 e9 ^- J# D# @. k$ J: l8 Dprintf("依次退出的猴子: \n");/ ]; h; a5 g* q3 C. [! x
while(count<M-1), I7 H+ P8 c: p+ [) j: f
{i=0;
; @; A/ h0 k8 p. A1 L' w2 {1 Zwhile(i!=3)
$ u7 H p7 y7 u. P. ]{ h=link[h].nextp;4 X! t! G F. q
if(link[h].number)
7 @. [" b7 _$ v/ a# B i++;}
& }* }+ c4 b* O, J$ g
, V+ c2 Y3 ~+ p& Q( u, Sprintf("%4d",link[h].number);
/ j5 m- \; L/ d- I" {( |/ tlink[h].number=0;
( ~9 c; V4 O- O8 z w7 Jcount++;
- T6 M+ W5 x0 E0 k. F}
; x# {9 r6 m) m7 Y& Q! {' C+ z; W$ g3 W4 L+ I
printf("\n大王是:");
. ?' o- y5 P! u! v' O for(i=1;i<=M;i++)
: F. z$ z- H9 l; S. {. E8 p# ?! k if(link[i].number)# V7 q5 s7 ?2 s" h+ X% J3 _8 _5 X
printf("%3d\n",link[i].number);) x+ [- L. f6 K9 e! t% K* g
2 _, A% ?6 r4 X; X' L. U! |% V" f
}
2 x: Y J( o8 t第三种是普通方法for循环% `2 _: u9 H# O
#include<stdio.h>
/ x' e$ m8 m* l2 W; jvoid main()3 }6 b2 L7 V& c) i& J
{ int i,k,m,n,num[50],q,*p;
! U! O' a- z: K3 J8 Y$ F- F clrscr();
. U2 l- Y' O; n$ j9 [! C: j. y* I printf("input number of person: n=");% {1 E* S9 m- \" g6 @) F
scanf("%d",&n);
5 H' p8 Z- f! ]2 `: R& R' u3 F; J g0 E- Fprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只5 g$ ]5 Q( I; D: C- h
scanf("%d",&q);
1 `2 k1 H/ [& W$ d p=num;- s6 o9 r. Y. X7 d' u( Z
for(i=0;i<n;i++)
) w- q, W9 \ j *(p+i)=i+1;
9 O& k" O3 S0 x& D# Y i=0;4 K1 o" M4 @" p$ J0 _
k=0;5 K) ^* E6 W" p' S
m=0;
7 r4 {% r$ Z' a8 p6 Q8 _ while(m<n-1)7 H* k) H' q" o: d) _0 A+ L
{if(*(p+i)!=0) k++;) e/ h0 |8 l [+ u
if(k==q)
, X" I/ R" }" R$ Y( w2 C! W/ b { *(p+i)=0;/ b* P) G! o( w; x: S
k=0;, Z R, j+ @2 V' x( r# Z
m++;- J5 l, K% h: |5 g
}
5 f: d9 w4 N# V/ T3 y) h/ J3 a. f i++;
2 ^" p4 s4 \- }, ?3 l if(i==n)i=0;
8 z* A* m; R8 a# K6 R. } }+ [( {5 T! C! A% y" q1 u8 U$ o. ^! Y
while(*p==0)p++;
9 _# W, u) t! K5 U printf("The last one is NO:%d\n",*p);
& F- ~+ s) `8 M getch();
e! H3 ^" a! p! B' r) E/ j. w5 ?5 x: E7 h. P% b
} |
|