|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
/ f0 `9 a7 o( s4 S. ]这几天我在忙着编一个问题,我用了一种方法编出来!
9 I' s6 x3 A1 O2 z+ Z4 n+ z但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
; G- G0 E1 a: Z3 B, n$ R' B注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 & \* I" D; k$ V3 L* |9 o" O
. C5 H, j) }2 a! q
# R$ H3 z8 S5 A+ ?: b& X0 ^ 题目0 s# _9 f4 z( W9 g4 O
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。# M$ I& X" E+ R) @7 U) `9 O
第一种方法:利用循环链表
0 O3 b! P+ B: o) s#include<stdio.h>7 _8 o9 ~; K' U5 C3 O9 @
#include<malloc.h>; o- z8 G P6 z7 }* U6 M
#define M 8 //共有8只猴子
$ C% S0 l$ Y. h$ e) B3 d; t#define N 3 //数到3只时退出第三只
8 _ D4 f$ H8 V. C: s, ]4 Ftypedef struct monkey# b8 j9 I- r; }' H9 u$ c L1 o \3 b
{int number;( K0 |4 H) O0 E
int flag;' q% p1 ^7 i% }' T7 U$ P @
struct monkey* next;
$ E x: i# ~6 J! u7 |}MONKEY;1 ^8 r: j) N# @8 m
main()( [- ?. Z, e B1 }: M( `
{ MONKEY *head=NULL,*p,*s;9 L8 ]) g- ^4 _: V3 [( A; T
int i,sum=0,count=0;
- z% w3 R; o4 M7 ]: S clrscr(); //清屏
4 C; r+ B+ F( u( M z p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存& o. h/ N, [& D, {
p->number=1;p->flag=1;
& L- u8 j7 g4 R$ { p->next=head;
D1 f4 L! S9 s7 j5 B head=p;, M/ W# y0 ?$ h) ]
for(i=2;i<=M;i++)# x( ]/ J6 K" M6 _% T
{ s=(MONKEY *)malloc(sizeof(MONKEY));3 [, |* p9 n* [) f) @* M" T2 i
s->number=i;s->flag=1;
* |6 A5 \! e# j& K$ d s->next=head;* [( t8 z( Q6 X8 @. @* i
p->next=s;p=p->next;2 }* a9 N6 j; h9 x& h
}; Q" ]4 P9 g3 V' A2 n8 h
p=head;0 U2 S7 j* n y0 D4 ^
for(;;)
7 ~+ H5 A, D5 `( z: ]+ | {if(p->flag==1)7 Z6 M; {4 t& R/ r1 C6 c' }) D+ d* Q
count++;
9 N3 w o' l% r, O8 A( k if(count==N)/ T# [7 ^9 @. E: \8 H; q' i9 R0 q
{p->flag=0;8 {5 G' O' [( E( n9 m* E
count=0;8 D" F g' s" m7 _: w/ b+ ?
sum++;}
# n1 o/ A- w7 x- L9 Z. b! b if(sum==M-1)& g( C3 b' T( i: E! U0 F
break;
' M X' i& p1 L9 A# I. K) A p=p->next;, o( X) ~% A) i1 L
}
0 g" m) U0 C# g. I, M; X p=
4 W6 m6 }( \ w$ v3 M# @7 X0 [ head;
; k6 I/ r3 w5 N) \+ C for(i=1;i<=M;i++), Z% w3 E h' b: _8 C, u) H; F/ t
{ if(p->flag==1)
3 E. E, O/ o* e( { printf("\t%d",p->number);
6 o' Z5 a" o. b) Y: o% Q p=p->next;! L5 i1 w; ?7 e n$ l3 o
}" T0 @$ ]7 ^; H- L# X
$ I$ U; h/ X& V# G' k) g8 w, ]
& X! U+ t) ]3 }" m# B5 s- l} $ ]/ v5 E" l+ C9 ^3 p# _
第二种方法:数组
8 c3 c" R: @* v, U3 A0 x#include<stdio.h> ? z4 E4 e" u, d9 h
#define M 81 g/ b3 `/ e1 b: Q; V6 Z6 z* X
struct monkey
. D/ Z1 _2 ~/ W. w8 e9 c{int number;
# P4 N( J# P8 `. U$ l7 r% y3 ?int nextp;' s$ B9 T' z$ _, o% U
}link[M+1];7 ^! x: g+ _) H+ f" M- M
( k4 i! g! P. }1 jvoid main()
1 ?7 _- _8 ^ m. p{int i,count,h;
7 ~: g. x* `- x: z6 d$ s1 }4 n1 Afor(i=1;i<=M;i++)
2 ^: q! h+ X8 U5 o- I. n3 t& `8 _{ if(i==M)
6 O1 t! d& }, } @& j link[i].nextp=1;
* P& z! p0 V. p' K$ m4 u0 C1 q else, H$ u1 s' s3 A" F1 E
link[i].nextp=i+1;
1 K2 t9 x/ s% N4 r& C8 w$ j link[i].number=i;+ I& g) _5 s* e7 r( e s+ ?. ?
}
9 j- ]9 J4 s( s# [! h! b3 g8 y9 u' lprintf("\n");
% E( \$ h" p4 U% B; `count=0;0 y% M T- j8 R: S+ f) H. }0 t
h=M;: n$ n" L1 V8 e& j" ]: w, s
printf("依次退出的猴子: \n");
+ {( S- O8 r" V6 U! Owhile(count<M-1)8 X8 l" _9 b( ~& r- Q8 E/ c
{i=0;
( J1 g! ?$ ~: fwhile(i!=3)% V6 |- O7 F! @( A; A; @
{ h=link[h].nextp;
3 i- r. s8 K7 f if(link[h].number). G$ ~7 H& P$ n- O! Q
i++;}
/ Y$ K. x& m$ Y8 S$ l
0 ]$ Z" T+ _. N% y+ B7 Zprintf("%4d",link[h].number);
- B j" M" W/ d- z ]) t( F* }4 J# U6 Nlink[h].number=0;" {% u) o, l X. E! u+ V5 @3 X. L
count++;6 h/ K. |& W V, N
}3 C% Q& a- H/ [, P
- d* E4 z. n! _$ m; f4 J+ T
printf("\n大王是:");
' j: N! t* X7 }* j for(i=1;i<=M;i++)+ l* m( i r% G
if(link[i].number)' W: ?# T! J6 h$ q( Q
printf("%3d\n",link[i].number);
) N3 E( ?* q+ G+ T$ ^; B( d8 U; U8 y7 _9 U$ v) {- r% a: n+ r
, P: [0 n$ L9 W" B) r
}
! X; Y, M4 P4 k$ e第三种是普通方法for循环3 W4 M8 J9 P2 W- W, C- ] x
#include<stdio.h>3 Y/ x0 O; V- s
void main()
8 Y6 y( E' ]+ q/ }6 _! g{ int i,k,m,n,num[50],q,*p;
r* H# S+ A, y/ R, U2 a clrscr();
6 `$ ^& x2 h# w! N+ U printf("input number of person: n=");
5 ^ V% |! ]! p7 ~1 u O/ m! k scanf("%d",&n);! k1 ?" a) i* K8 s) h
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
* w8 [- ^! @0 D( S scanf("%d",&q);2 c+ q5 ?' {: L) U* F
p=num;
1 q) b7 |+ t2 E for(i=0;i<n;i++)! b# j% M: w0 V! `
*(p+i)=i+1;
; K% w3 ?- \, m6 I i=0;
& `# L( h/ X) ?$ ~1 G k=0;
" s3 C* P& z6 m$ M m=0;
/ v: c2 V9 t0 G$ z' C* r/ v while(m<n-1)
9 Q% x/ l# f) _ {if(*(p+i)!=0) k++;
7 A; Y9 G" O$ m1 |* b if(k==q)
- U+ h* p3 _. r" H& z$ u { *(p+i)=0;! }0 x1 R; ]$ ?" a0 _& y+ V
k=0;' s3 o9 i* l. t3 d
m++;
; W( ]/ @4 s. ~9 _- M" Y }
$ l* p2 p9 {5 r9 H7 E i++;
( f) S. t- @0 m( K0 q6 V- \9 m; X if(i==n)i=0;
9 }4 F( i! J5 x: P1 B4 r }2 d* `. V0 a2 d, l! A! L! |
while(*p==0)p++;# q2 W6 G+ o2 c; u2 i
printf("The last one is NO:%d\n",*p);) F. c( O" ^5 C- u
getch();6 L! u. _6 E# b) ^6 N7 N
5 @: ~# [, S/ `% F A6 }8 }; L} |
|