|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
* p4 z7 ?1 Y, C2 ^, y0 X这几天我在忙着编一个问题,我用了一种方法编出来!0 U. I+ c% N& i+ O1 q. G9 k) [
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!5 G% E* H8 z2 c% [( K/ J8 s
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 - ~( ]8 |4 Z+ x6 B" g
' S: ?0 N) J. G H! d; ^3 n- o2 ~* a) @/ M( ~* F3 @
题目! q; M7 Q, ]/ l E% r; a, L
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
4 w: L% M4 q: M+ x3 ~ b第一种方法:利用循环链表
; o- s* ~3 A O8 X#include<stdio.h> i- z' o! m0 f0 j) v
#include<malloc.h>
( m4 y) ]" e' e% s5 I, X& Y$ U* E#define M 8 //共有8只猴子6 Z9 R+ e/ W8 @, w: v! o; c
#define N 3 //数到3只时退出第三只
# i c% }/ W5 ?: Itypedef struct monkey8 O+ s0 C/ g7 U _' P4 G
{int number;, F9 h9 m2 k9 X/ e
int flag;
* v! F ?& t; c/ ^struct monkey* next;$ w7 S8 m! D4 v+ N$ S
}MONKEY;
2 c3 Y5 _6 _, y) vmain()
# f- r7 P0 E x( M) z& i: n: D2 m{ MONKEY *head=NULL,*p,*s; u, B/ t' x$ ~7 m' h: a- o
int i,sum=0,count=0;
& Q+ B$ _5 F1 F3 W3 M" C/ N; n3 @ clrscr(); //清屏$ i' a* N0 s6 g: m0 S
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
+ E( s+ @* V" ~) M0 l$ t p->number=1;p->flag=1;* Y( R5 u, V7 `( Y, C8 `- H, k
p->next=head;3 y5 i3 r! e8 ]6 _8 t0 ^
head=p;3 d2 x$ S/ {3 X+ v1 s
for(i=2;i<=M;i++): f, }! X3 z1 q1 N
{ s=(MONKEY *)malloc(sizeof(MONKEY));. m9 Z% Q# P7 _
s->number=i;s->flag=1;: Y m2 {3 u( Z' v: R. z
s->next=head;
5 F8 V! I$ ? q# ] p->next=s;p=p->next;( W: ]; @3 w8 O
}2 D! E0 b. m2 ^, l. B8 w
p=head;* T$ B3 J/ d) f1 Y |2 p
for(;;)9 B7 z, W7 v- {4 I5 Y) T
{if(p->flag==1). _, Z7 g. b" r E" s2 G
count++;
! X2 g/ D# c H) C9 j0 M1 J if(count==N)( U, d+ I0 B: D+ F$ _
{p->flag=0;
; m7 R# ]7 {; _ count=0;. f, D( \, G- J* _
sum++;}: ?3 T3 g1 W! u6 ^/ o* W
if(sum==M-1)4 ?# M3 H0 l* y4 k0 a; j
break;" @0 w5 a) g- q! g
p=p->next;
2 T; N& i+ j' S( o' f+ L, N }0 E& [- m( s W
p=& u3 k9 _; G+ k% m
head;
7 }6 W: T" F2 ]! x% e8 D, w, b for(i=1;i<=M;i++). d4 h3 r5 D8 r
{ if(p->flag==1)' h, Z e; i) S/ k
printf("\t%d",p->number);/ Q: Z& V( m2 V) t( u% p
p=p->next;9 Y8 H: F4 g2 _& S4 y8 S" i
}/ {2 n* I7 x/ _& r7 f
4 D4 X0 p) _+ E9 y& x1 w! N1 ?
7 E/ l, U" j" r" T$ g) o9 R4 y. d/ E* d9 k; h7 {' T5 ^1 c
} - |$ t. J1 z, N4 f, l9 I+ V$ W
第二种方法:数组
( ]2 E" y# l6 i5 X( d: _( U#include<stdio.h>
: `7 l0 C3 t: T. y1 Y! V3 U#define M 8: M- A0 e1 ~6 W' _/ m6 f
struct monkey
3 P* I) n' Z+ l/ J- q{int number;
1 E# n4 |1 |& n4 X1 r% l9 iint nextp;* {/ k7 m0 n5 k; r5 x. d( Z7 w, s! X
}link[M+1];
0 V8 @4 ^1 ]# W! t ^& x* J ^( o4 E) w! u8 h; h
void main()# O: |0 N7 Z6 R: q( n4 A
{int i,count,h;
1 ]& m" d4 z5 Dfor(i=1;i<=M;i++)/ Z) @5 { m D5 X3 n. N
{ if(i==M)& V/ \/ w1 I7 [9 X8 b2 ~" j$ Q
link[i].nextp=1;. J g0 e6 N5 F( V
else
; q2 Y4 Q) N& p. n! J0 I G link[i].nextp=i+1;
% s E5 G8 @) h4 v! ^ link[i].number=i;: r, y1 c3 E: e: L; ]+ z$ `
}
( w& ^+ c- E4 c( m% Z% t2 Hprintf("\n");
! y4 d4 V. V( g' ecount=0;7 W8 H2 f& m, W" o8 V, k5 o
h=M;. m) h9 K; p y% @ p% U! P
printf("依次退出的猴子: \n");
i0 e8 z$ Y4 `6 N" `while(count<M-1)7 e8 I4 S s) [, ]# X6 \
{i=0;
$ C1 z7 |5 [ Nwhile(i!=3)
4 x8 T m8 k" u1 O6 h{ h=link[h].nextp;2 T2 w# s, I: z. j) N V
if(link[h].number)
- Y; o, P% H _0 j i++;}
% {) J% }: z" H+ g4 X/ n
, c. |& n/ R! C: R& B3 O! Fprintf("%4d",link[h].number);" U+ e5 t% \) G$ T1 _4 x2 ^
link[h].number=0;
2 a& i x& Q9 N! p8 Y! k1 [count++;
4 \: l8 K$ B/ L8 |+ s}) ? p/ E1 j2 s( R- a* j. q
3 s3 v' A0 y4 o% e/ G6 P
printf("\n大王是:");% j, i: u& o! a3 T% b P+ v1 _
for(i=1;i<=M;i++)
- N5 U; u8 b! [6 r1 V if(link[i].number)
( p# S+ h" L% f printf("%3d\n",link[i].number);" G7 d" t* u0 ^( S, V; v9 L* C& {3 u
- u! G- o2 ?% F) X' W
! K' z- M" C w$ \- l} ; E9 \ {0 K: L0 w
第三种是普通方法for循环
( l0 ^% D+ m! u$ ~' e3 l% s( V2 i#include<stdio.h>4 v- P# j9 B2 ?
void main()+ c) a9 x7 z3 x! E
{ int i,k,m,n,num[50],q,*p;
/ c: j( @4 m. q" d clrscr();: H+ m% _* X0 F+ x) u) V
printf("input number of person: n=");
7 [* T) I* H" l% @+ X) d scanf("%d",&n);. j3 G7 j% \8 i8 v0 e/ l# D
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
; \: X8 G$ Y- h5 e scanf("%d",&q);
+ a/ p% {8 I) U( C p=num;. R9 w5 Y( S& M' |# e
for(i=0;i<n;i++)
% s8 t) g. M9 x. e3 B/ ~ } *(p+i)=i+1;
) D& h5 n( G% B3 B i=0;
1 y. B7 d& X$ G# J/ I# P k=0;. I7 z2 K7 O. N, q5 u# W4 [
m=0;% {5 b3 H0 W1 D a, G
while(m<n-1)- a3 m1 p1 J: `, P0 G/ S
{if(*(p+i)!=0) k++;
( e* X. R& O4 K: I: N2 @9 M if(k==q)
7 n/ f5 O: _! W' u( y( L. e { *(p+i)=0;
4 P0 F' O: l7 Z$ ? k=0;
- A3 O, J/ s) f* g$ K/ ^ m++;
5 Q0 d9 k! z* w) A0 W } L3 r/ b& q% D! l$ _3 w, B3 f5 c% k
i++;
% |) ` o0 \8 }2 T8 L if(i==n)i=0;4 ?0 d' y k" ?( P4 e; l
}; d- N5 J) {4 ], r
while(*p==0)p++;
$ p# S+ D, v- ? T printf("The last one is NO:%d\n",*p);
, E, C% Q5 t# }: [. t5 }; i( J getch();
) H- Z0 K$ g" t6 b( Z; \' A! ]3 T% E3 b, H+ Z$ q
} |
|