|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!& c7 ~$ j0 g0 m- e/ X' R' e/ S5 r$ \
这几天我在忙着编一个问题,我用了一种方法编出来!
( l, Y9 {% m2 A$ E但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!2 f( K2 h3 W) {+ Y$ V' O# Q a
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 + q; x/ @& I7 ^5 C5 {' x
8 ]( Y1 T" ?& i2 X& g
4 U. d# a1 n2 | S+ q1 a
题目
. G# u; i" Z; Z3 G; n. K山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。8 q9 y5 a, |" a0 a7 y+ C
第一种方法:利用循环链表6 p" q5 f8 a6 f% s3 `
#include<stdio.h>
8 t8 {# M+ t3 s( b5 i/ G#include<malloc.h>' P o. f5 J+ J- [8 Z/ d
#define M 8 //共有8只猴子3 ?2 D, ? J; ]9 _/ b5 z b3 L
#define N 3 //数到3只时退出第三只
2 h* g4 j( Z6 Wtypedef struct monkey
! r. x' P$ e* H2 U8 T0 l{int number;
; t. X" p% X' m) i& yint flag;( L4 `- g) e5 x1 b1 G `8 k
struct monkey* next;5 N: C& s- z; n. y% N2 m
}MONKEY;0 [/ [; r9 i) f
main()
, v$ I. d7 U9 U; g7 ~/ n{ MONKEY *head=NULL,*p,*s;) {9 ~% L) Y9 ^+ L
int i,sum=0,count=0;" W3 g9 U5 }, N/ N
clrscr(); //清屏5 J# c) M A5 j
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存5 G' P% h# I* G' _
p->number=1;p->flag=1;
2 W! B$ o4 o9 ^, J; V# T7 I p->next=head;4 k4 s% {) x6 ~$ U- X6 s
head=p;- N6 P4 N. q2 N
for(i=2;i<=M;i++)
; Y: J2 L# _: ~ { s=(MONKEY *)malloc(sizeof(MONKEY));( M: J! x5 A3 u g5 w
s->number=i;s->flag=1;# w/ L( W- j5 g& ?
s->next=head;+ q& i: A; g% q. `( u ]
p->next=s;p=p->next;5 [( o5 A1 j( J, l, r
}5 G% N& T- I; ?, {1 q2 |# f$ S6 P; U0 Y
p=head;! ^2 B) V" z) [+ Q0 r7 B3 l+ g
for(;;)
, m5 @4 _5 I: O0 K, |. X {if(p->flag==1)
* q) r3 m- b* ~+ I3 L count++;
& P# E( c0 b& {) w$ {( g if(count==N)
e7 v2 M5 x0 M6 a {p->flag=0;9 u$ y* W# {$ B, U& ]+ B3 h
count=0;3 g, {6 T8 s8 R
sum++;}5 L( \( ?9 B; e |0 U7 ^3 B0 e
if(sum==M-1)' O5 v. Z& Z+ i2 \+ k1 S* O
break;2 q5 D& J+ e: T3 }. q L# Q
p=p->next;- I) F7 r1 g4 V+ H
}. a+ Y9 C0 |( F- E4 E l+ f
p=
: S- Y8 i% [1 L2 d( W/ N" W head;
& m' I! E- A: u ~- w5 X) ] for(i=1;i<=M;i++)
- l* u% {: N+ K. e7 V F { if(p->flag==1)
; @3 R; l. O- R9 f+ A8 k printf("\t%d",p->number);
+ X9 n: U( v5 r* f9 A/ \4 _ p=p->next;+ s; W+ f N/ m1 G0 O% [
}& Z/ N4 t/ \* \$ Q& @& }; s
" `- N! I' `) d5 K' H- @( _
1 m4 q, m3 `, I& T7 w' i
`, _6 z* a- e# j}
7 [) `4 y1 |- W7 b z第二种方法:数组
. i7 t9 ^/ E4 d: m% c4 Z#include<stdio.h> S: b+ `& W0 b1 y% |( _
#define M 8
+ R/ C0 J$ @: S8 Kstruct monkey
6 B# b ^2 J# i7 C6 J+ S+ R% ~0 o{int number;
& {' i* P) G; Mint nextp;* D( A& [' {! ^: W& z" q4 q8 z Y$ Z
}link[M+1];
4 g" ?$ \8 i- ^. I5 v( Y# d8 Y7 ~% j( \0 \: t' L
void main()# S( Q! m) N2 ~3 k0 @
{int i,count,h;
}+ T8 i4 m' u& [& j" Ffor(i=1;i<=M;i++)1 w9 N$ w. B. E. S: A
{ if(i==M)" q0 k U# X) s0 m$ `
link[i].nextp=1;3 }+ Q' r9 y- [; K
else3 A$ P" e3 V- y; b7 d
link[i].nextp=i+1;* }" o$ e4 V$ p) r) w0 y) I4 r
link[i].number=i;
& @# n, `1 N2 ^7 p6 O}
6 E3 T$ E7 J4 r4 j V7 Yprintf("\n");% ~5 ]' v2 p3 ^( {
count=0;! ?$ G# D9 l1 [$ U
h=M;
9 n& m# l6 b _# dprintf("依次退出的猴子: \n");2 | ^. v2 K6 c/ B" s7 p4 ?
while(count<M-1)8 ~9 G" c7 R3 H' G" q
{i=0;% y) o( F& A8 o3 X* r' N' Z6 B
while(i!=3)7 `+ f. }/ U/ _, {. @
{ h=link[h].nextp;
2 _" O# j7 m9 V# D2 Q if(link[h].number)
: P7 D/ P# ?0 w7 {6 i i++;}
- P7 v q0 @) R# T4 N- h, M/ E* ?9 ^, ~) Y5 u5 O4 E: ^
printf("%4d",link[h].number);( G; h% D! L2 N+ r; O
link[h].number=0;
/ L9 p% f* Q1 Gcount++;8 w! ~( i2 O; S( C% G! K
}0 @( C/ k9 W# C+ n# |: B
% k5 y2 m, p) G1 _0 B
printf("\n大王是:");6 k% }) {& x/ d, D$ J& n& i
for(i=1;i<=M;i++)
+ U) I& \9 c( [5 O9 ~# g3 M if(link[i].number)" ]8 N9 }& M$ r1 j
printf("%3d\n",link[i].number);( A! L8 t# y- T. h( V
" m/ i9 _" N% \) c+ G1 |
- {- Z7 q" k/ j7 b* n4 V5 L- D} 3 N6 u0 L4 \1 h$ {. l7 E. ?
第三种是普通方法for循环) @: y& @8 n$ ]: }2 F) h
#include<stdio.h>4 |3 p) x1 l' f5 e' U1 k8 ?
void main()
5 u$ Y3 [8 Y9 i6 m5 z) L7 d{ int i,k,m,n,num[50],q,*p;
' c1 C% x2 m# X9 v clrscr();+ `3 l* l/ G: A0 g: {6 a- M* m
printf("input number of person: n=");9 R+ [; N' h3 ^+ O+ ?
scanf("%d",&n);
: Q% ~; \! ]* z& _- T$ jprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
7 s& }4 t" o0 p; z scanf("%d",&q);* Q7 q6 r/ ]7 O7 E# M
p=num;
4 V) y) C: A' H for(i=0;i<n;i++)1 u( F% h. {- Y- ]7 O6 {6 T$ n
*(p+i)=i+1;! W0 ]) F, K, d; ~7 h1 w& @* S
i=0;0 o. M' L) t$ I
k=0;
9 q2 ~( X# Q0 ?) f4 Z6 A4 D m=0;
7 a# i5 e1 x8 H7 f r8 J while(m<n-1)
; ^! I" m) C! D6 C {if(*(p+i)!=0) k++;
% z" K9 o6 _" d& A+ j& H5 |/ {3 E if(k==q)
: ~" Q8 p* D: a$ C { *(p+i)=0;
) Z: W5 t% d+ w k=0;5 X* M& W) y. }; E5 h1 I. L
m++;
' {( y$ T# N9 Z9 B2 s9 A# D }
: k7 T- }5 ]' ]$ f6 G$ {9 [ i++;
* l; {1 S1 m A' d% L& O& S# M. Q1 D if(i==n)i=0;$ ?. y& [, \8 M6 N
}5 D% Z' w; e# |% V+ ]" l' d
while(*p==0)p++;
. |2 e& D+ ?' R& k8 o, p u printf("The last one is NO:%d\n",*p);
1 E5 c" ], W* i7 k4 N4 E, n3 { getch();$ q/ q7 ^! V6 C" b ~9 n2 g
* C+ @( |+ F; o6 c0 ?1 k9 T} |
|