|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!/ W0 z& }9 l1 x0 _1 ~/ e9 \
这几天我在忙着编一个问题,我用了一种方法编出来!/ ], J' s1 j D7 I a. k" u
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
1 O; m$ m3 d, b9 V; E4 |注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 9 u4 ` m" U9 s/ U3 i
+ M8 {) X3 f! O& {* I g8 \# y; b, B& ?6 l6 x7 G6 D6 t9 C/ K
题目
4 i/ `, S' L% i1 y' D. f山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
. @. C# j- b5 B第一种方法:利用循环链表
1 D" x/ H' g0 B) {/ J, b#include<stdio.h>( I- d% _ A, O
#include<malloc.h>5 Q) O! J+ l$ h2 g! ?" L
#define M 8 //共有8只猴子
9 g* Y0 P n: X% K#define N 3 //数到3只时退出第三只
. Y7 ?! [) D6 M. dtypedef struct monkey
' T y, J; Z. p( E+ k{int number;- V( Z3 @8 [: B+ f, R
int flag;
* ~ V+ P: \ f: [4 K. ^struct monkey* next;
2 h5 z! g2 Q- Q, }# o! s L}MONKEY;
5 o; B L x0 S# z0 M* }$ Omain()/ V: W9 N5 m1 S9 e& j b1 C/ ^+ }
{ MONKEY *head=NULL,*p,*s;# C3 U/ w5 F. p, \2 g& `
int i,sum=0,count=0;
# G/ P6 F8 _( ^$ c# x0 G clrscr(); //清屏+ A3 y( ^% O& E- W" x/ u: c% `& ?
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
( o' I# w. A2 A3 d p p->number=1;p->flag=1;
) F5 X5 v; ?) ` u% B p->next=head;9 x7 b% T! ]2 X+ \( |0 j
head=p;
" ?3 _8 d5 h' ~; J for(i=2;i<=M;i++)
" [2 z4 l7 A1 L; e# G { s=(MONKEY *)malloc(sizeof(MONKEY)); J/ w( t4 ]' \2 q
s->number=i;s->flag=1;
) ]. [* `6 {' T1 O6 Z+ C s->next=head;
2 |. r/ ?' F8 Z$ j3 ~( F( n7 y3 R p->next=s;p=p->next;
5 v4 O9 V7 J7 M$ v }( i: X$ K1 L" Y( l
p=head;
7 B: q( C+ R& }2 H' |6 `3 D for(;;)6 x6 U: |3 t! K$ e P" ~2 ^
{if(p->flag==1)
/ K2 T& z; E1 ^1 h5 f$ A count++;
4 ?/ ^; M( f$ M2 X3 j if(count==N)
* y0 u8 e) Q3 Q7 C1 A& { {p->flag=0;
7 c+ q1 J3 [" ~+ Z( @! P count=0;
3 }/ d0 a* K! r a sum++;}
" k# N9 e% M. d1 ?; q if(sum==M-1) z0 Q- W; m j
break;! i. p d! `# `7 F
p=p->next;
; e: U4 _$ G. D! f }
3 @" ~" l5 Z! r8 q# S- _, W4 r p=( F; l2 V; b- U& Y, I) l' a+ k
head;& C/ x* e( I4 J; Y0 r' c8 d7 y( a
for(i=1;i<=M;i++)
% f. y( m% ]3 b; v* {3 V% S. S" x { if(p->flag==1)
7 V4 T& `- \9 }. E printf("\t%d",p->number);3 u3 g5 i1 m d( D$ N
p=p->next;0 B& V# W1 {- R/ N `
}
8 x, f0 j# U% S8 b7 X5 j( K/ @ ]
1 x" p: b+ R! }6 [6 u% v6 e
) ]0 F1 S9 j! Z. @+ |2 j1 N1 O
+ A8 o z' c7 N* q8 ~; ]' u" C+ f}
9 o' g' Z% g% _4 x* `第二种方法:数组
5 a/ t: N6 S# H) X#include<stdio.h>, U P; k5 u9 z4 z. s. ?3 X. q) F# ?0 L
#define M 8
- b4 Z& O. N2 A5 K* G @struct monkey
, x. B' o O; t, r8 \{int number;, O% R ?. t, ^5 q# Y
int nextp;
. p V; i% h/ t}link[M+1];" P6 O2 p6 t; F/ Q3 q
7 g. _& `: k$ O+ _
void main()/ m( S7 y3 {: b' w% Z
{int i,count,h;( e1 l% y& x6 i$ `5 A
for(i=1;i<=M;i++)
8 x7 n4 W/ n; ^{ if(i==M)
' ~2 z9 w& c$ c* l( N link[i].nextp=1;
7 [) O# ~' E! l: c! |% p else" z- `* T ?% X" q% A, c" I U
link[i].nextp=i+1;$ P, g2 s' e7 j7 |" f5 t/ u2 X
link[i].number=i;
/ Z* R% N$ Y# }1 C; u7 O}
% T0 B: R @: |1 v8 o" kprintf("\n");( W) D8 m; u1 u- D
count=0;
( |. E$ H, F% [. t x, }- ~h=M;
4 _ a: l! {8 k3 O* fprintf("依次退出的猴子: \n");! R2 H: S0 |4 n0 M* u
while(count<M-1)4 |& X1 N7 x. X0 B$ Q, l6 t8 T+ \
{i=0;4 O" d" s1 N) A* C+ Q+ N8 E
while(i!=3)) g8 _* b8 {; q2 g) N
{ h=link[h].nextp;
z& c- j/ c& u4 K/ \0 o2 f if(link[h].number)
7 L2 y( H9 x5 o f: d ^ i++;}$ p$ m) Z& c, B, ~+ B
; ?$ q+ ?" x( c' e6 u9 J
printf("%4d",link[h].number);9 }; C) \8 ^! n6 w7 ~9 E0 y& H
link[h].number=0;
7 m% s" F7 r8 @# dcount++;4 B" G7 f; d7 k% U7 Q
}$ b+ }2 i3 Z& Z: U
! _5 E2 s6 [; V6 J- k8 E0 R; R7 dprintf("\n大王是:");6 E: W& Y! v; _4 a% X
for(i=1;i<=M;i++)( S+ C3 P# y9 l+ x/ l+ x1 A
if(link[i].number)
+ b9 Q' o7 w+ r printf("%3d\n",link[i].number);: |" S l2 ]* r' ^
* ^7 y$ e/ C0 J6 K
! W$ ~$ A' N; I3 Z, K( ~} & a1 a! _& x' j+ i& G
第三种是普通方法for循环
! c7 |7 k% K/ i7 I/ M#include<stdio.h>
9 d9 k" |. {$ N% Rvoid main()
: L) l: d" }1 J9 Z{ int i,k,m,n,num[50],q,*p;
4 J, z T8 n. G+ Z( M$ e* w" `6 q! c clrscr();
: F8 E3 q; }( s$ ~5 a( C5 B printf("input number of person: n=");& B' R' f5 \1 b" X5 k2 p
scanf("%d",&n);& O" ^5 E. a9 c! }- _5 ~
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只* c3 r/ Z8 b7 Z/ ?5 @( B% v
scanf("%d",&q);
% v+ t! {- H" v p=num; g ?+ K+ S% H( `; _% H+ d
for(i=0;i<n;i++)2 K7 r% {" |0 e% r; B, t
*(p+i)=i+1;( @3 t" U9 I& g: B' K8 i8 U
i=0;1 I( M; F' Y* h5 T& Z" d
k=0;
4 s& ?9 F' `4 I7 V4 [, D7 x, E m=0;
1 f Q8 d; J% a# o1 { while(m<n-1)
) J ~6 ^* I8 i% v1 C; `$ Q {if(*(p+i)!=0) k++;
. k0 Q; E+ _% d8 p1 B& E5 q if(k==q)2 ` I) m0 D8 O
{ *(p+i)=0;
! N) \5 U5 X/ x$ F$ M5 ?7 J) c k=0;: D0 h' ] }( @9 q6 b
m++;( q! C8 X! J& E6 t. ~- ~7 Z/ v- t
}
7 H+ s3 a& M" M# x! X) q4 y$ K0 \ i++;
! ]; L/ i# c+ P }2 a& T* U! _ if(i==n)i=0;8 I* U" Q+ p/ ?. `9 Z9 \
}
5 |3 T m9 P$ o: `8 F4 E while(*p==0)p++;
; w; q9 M; A( ?+ D; h0 d printf("The last one is NO:%d\n",*p);
& x- \3 E( b' H$ \$ p; M getch();* ~; I- v8 c& E' S, E1 {
1 W, L/ \5 ?# Z0 i9 m# m2 n) l} |
|