|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
8 C( W5 n5 o2 b4 ^7 S这几天我在忙着编一个问题,我用了一种方法编出来!0 S( B& g% q% }6 r3 a- ?7 _# _
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!7 i% E+ b' W b+ Y3 g, P
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
4 j; b! e T$ K; ?8 A( P! `
9 u7 m! l8 z) B: v ]: ~0 G/ h1 X& p
* p! y; U% G3 `% D5 H8 m% O* _9 K 题目
0 E" U$ Q, p% s' X; a山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。. D8 B2 J9 }# ?
第一种方法:利用循环链表
7 a( U. D; P( n+ `8 S3 _#include<stdio.h>6 |' z6 V8 P! s5 t/ F
#include<malloc.h>! K& u9 @, T* T1 U7 l2 r) M8 a1 t
#define M 8 //共有8只猴子2 k3 B8 ]1 A; u ~- W3 ]
#define N 3 //数到3只时退出第三只
3 y, j% D* z4 I% ~ Itypedef struct monkey, u4 v" z$ e% s& N" [: D; B6 d I
{int number; t% T y! F6 h, E% v6 p
int flag;
" G) l* ^4 l+ ]2 y" ]3 |struct monkey* next;
" U$ A; q/ g- S2 a* r+ u}MONKEY;8 c( P; C) s* G: K/ F i: v* L
main()( y. h7 T- z( [ \) w
{ MONKEY *head=NULL,*p,*s;
( t# e4 K: K6 b8 ` int i,sum=0,count=0;; N2 H* h: ]% l2 S" t& @5 R& @
clrscr(); //清屏
* g( D, T" B$ ?, Q$ F p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
! R! I5 r2 N; S( k p->number=1;p->flag=1;1 H" I* o6 O% e9 u b
p->next=head;8 Y' j J9 Z* D6 n
head=p;3 t0 s) y+ y ?$ T( M
for(i=2;i<=M;i++)
, l' t7 h& h; h- r! y& Q7 g { s=(MONKEY *)malloc(sizeof(MONKEY));) Y( H) Q' I" o( ?3 g* _
s->number=i;s->flag=1;
! j( ~ ^& P3 s' r- `: S9 U& G s->next=head;
) u& g0 a( c1 l3 A9 F1 d% _" t p->next=s;p=p->next;( j8 z" P( j. f, n [8 h4 l
}) f) d/ |0 H7 S. T; j, |. n' ]
p=head;
- |) F% [; U; t' X: @ for(;;), k7 c+ R; T1 u4 m9 o4 g
{if(p->flag==1); F \0 a* w9 V& g! Q0 \
count++;
, G2 }1 x4 ]( E9 ] if(count==N)
) ]6 _! v, h, w" z {p->flag=0;9 H2 ]2 m" `4 [
count=0;
' V! B) ~. W! i; F, n sum++;}
& v& [- U# a2 l! i; y. D if(sum==M-1)% z. Y7 m' k. U$ o0 y2 j; [" M3 W% G
break;+ R" G* `& z( \, C7 H- O
p=p->next;
) g' O8 @9 i9 R8 ^3 @9 c" `+ H }
$ T- F; b, ~5 ]6 k* [% p4 {8 O% p p=
( W2 [3 f* X. N9 X2 G head;2 ^ v) l% n& `6 x
for(i=1;i<=M;i++)
$ X2 W. s1 w* ^4 u/ ~% P/ |& c { if(p->flag==1)
3 L) c) G$ ~8 Q( t& }: y; N1 m printf("\t%d",p->number);3 f8 |4 V# v, j- _6 g! W: J
p=p->next;2 S* c: |# l. j" p) B
} n0 S2 }: m3 C! z* y! S5 N
0 U1 O: W0 \# |% x9 D
: ?" V8 s1 ~ a7 @4 n
( C# e) { Y* \- G$ |
}
3 r8 i1 f1 {. b' f: M: v第二种方法:数组
, R7 i* T+ u7 q" U#include<stdio.h>7 m }$ L5 `0 I2 U; _2 c! K
#define M 89 u) @- Q c2 a7 W+ C
struct monkey
: w, |& n" {* o! O8 v5 D7 {{int number;# E9 _) B5 h) b! N
int nextp;3 T" U4 a. f, h) A5 ?0 l; Y
}link[M+1];
* ]" D. ~2 } D6 X- ?; v8 ^% w( L8 O1 y! O; r
void main(), l: N) X* \# v& W; X0 s
{int i,count,h;
. _: q1 y& [+ r7 j; Bfor(i=1;i<=M;i++)
* s7 @# X5 V: W# Q{ if(i==M)& M" j3 d5 B; c0 `
link[i].nextp=1;" O& c4 w R2 ^2 e# [6 s( `
else
! C. r& l4 E$ H" z1 K9 q link[i].nextp=i+1;
: J% m4 F: s3 X6 z0 j link[i].number=i;7 r) M& t- z& U4 Y3 i7 E# E" N
}. ]& A1 i: K9 O R) D
printf("\n");* t7 [# u- B( ~/ `# G5 N# u% ~, Y! l
count=0;
+ D0 Z: e2 Y- @& ih=M;- _+ `9 S, { P
printf("依次退出的猴子: \n");- X( s- Y$ }1 L b
while(count<M-1)0 O% O% ~8 e) A2 r- ~
{i=0;
7 F/ p. {8 a, R8 D+ E8 Z* qwhile(i!=3)
: P# R- C! F/ D3 e{ h=link[h].nextp;! d9 ]& h( r0 N
if(link[h].number)
( \! I% @0 y. {5 K3 o i++;}0 t2 g: g' E; t2 U Q
6 O# _8 C* N2 b% |printf("%4d",link[h].number);+ r1 g3 ~. S# N1 A% n& {/ D
link[h].number=0;
7 r- R9 k8 ?, |) B2 h' }count++;
0 R3 o8 y, |; M; B" k6 B, O}7 n- b& z' L6 _- L7 l
. o9 g% r) c# U& O" Q3 E/ W
printf("\n大王是:");
' e$ o, Z2 A9 L3 s for(i=1;i<=M;i++)( v2 h3 \. K& O, {
if(link[i].number)
# e7 }1 @0 {$ q6 N$ ?( x/ s2 f4 } printf("%3d\n",link[i].number);
. |4 F9 }5 c P P! t" }5 V4 S; A# Z: \" i3 t, E
! e i: b6 \% @ t V. u1 C
}
3 [6 l; X5 g7 M2 Y) _第三种是普通方法for循环2 o, c! B i5 Q
#include<stdio.h>9 `0 w$ A s! n3 ]
void main(), w1 J- w3 W$ t$ \
{ int i,k,m,n,num[50],q,*p;
- p$ g' F/ a8 B- C- s clrscr();* m; F$ Y0 r( f9 R' u- y
printf("input number of person: n=");
* u# C \2 U& B* J5 y( C) `( q scanf("%d",&n);
8 o: w: ~! ]% u' ~$ V4 Eprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
& d0 P7 v% Z! i+ u" l scanf("%d",&q);
9 F" _: o! W1 p p=num;: {. [& V2 a$ M; e3 N4 p3 |
for(i=0;i<n;i++)
9 r& v# F4 X# S2 O" j$ F# b *(p+i)=i+1;
, ]' w |$ u B; v0 P/ m i=0;4 p2 D* B+ Z: f
k=0;/ l6 \' K7 F) l. N ]) t. ]9 u
m=0;
1 i& H' |9 Y, k$ n6 k% ` while(m<n-1)
' a" L3 L& p ^4 O) g" j: {; ^# k {if(*(p+i)!=0) k++;
( O+ l: }5 A+ l& j4 Z* N4 J& E N. b# f if(k==q)
8 Z9 b6 J9 f3 X/ G* l7 r { *(p+i)=0;
& t% ]& q. \ }( m8 g k=0;
" v$ A c q# d$ U# N0 h m++;
) p/ q( t, |% h% C1 N9 R* U, ~6 e }
: B3 r* v3 J5 J+ k7 I/ [ i++;
* f# q7 Q8 I3 X, k5 z if(i==n)i=0;. `: z( M& K! J' [7 Z1 ]# O
}8 g$ ~# u5 ]+ M; ]' Z
while(*p==0)p++;
& p" Y2 T6 d/ ?+ ^1 | printf("The last one is NO:%d\n",*p);8 C$ x4 Q% M- r' B
getch();( ^6 w. E5 y: p' p1 Q& ]9 Q* w1 E
% S# w; `' Z" r& o% M} |
|