|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
+ F! N5 v3 O/ z/ P. I# D6 R, x2 y& P这几天我在忙着编一个问题,我用了一种方法编出来!/ P2 E) I9 V0 X
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
6 r* S0 x- M. s& p& x注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 . g4 @7 ~4 c' h: U# o
. U$ j/ {* t; e# k: }
5 ~+ @& F! ]" K$ O9 j! [ 题目
9 _+ m4 P$ D: Z2 F0 [山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。. p" R. D U2 S; A6 U4 e0 e
第一种方法:利用循环链表
/ }9 Q% {" i# ?/ N& I/ n6 u1 T#include<stdio.h>: x! f2 G, i* P
#include<malloc.h>
/ x8 e) ?$ D" f! R/ a#define M 8 //共有8只猴子
! P1 a( Z6 }' W6 d; l#define N 3 //数到3只时退出第三只! R' t/ g) A& w9 S
typedef struct monkey+ L! `( b" Y8 X4 [: C" Z: E2 t# ~5 _
{int number;. L; M) Z: S; p$ [4 z' ]+ ^! ~7 [; n
int flag;
. ~( i+ \$ z6 W+ e* u! v2 M9 l+ @struct monkey* next;; R- s" D6 p/ |) ?
}MONKEY;
+ d! T4 ^- a4 x8 i$ H/ S/ G" i9 kmain()
' @( R, g3 a4 Y& O6 x% v{ MONKEY *head=NULL,*p,*s;
, y2 H4 X o X0 X int i,sum=0,count=0;
) m) Q+ G4 K( p3 G& |2 Z) s) M: v clrscr(); //清屏" w( w; @! q1 L1 U [2 P
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存! K3 @( S6 }8 L& G0 N1 n
p->number=1;p->flag=1;) ^% O+ Y+ ?3 T9 X
p->next=head;
" t5 J3 s7 N& o) N' a! A5 ?# f% | head=p;
* q/ n: @* G" A' ~ for(i=2;i<=M;i++)& K! y7 q5 C9 G( m. @* t7 T
{ s=(MONKEY *)malloc(sizeof(MONKEY));( [* q, b6 S4 U% H
s->number=i;s->flag=1;
7 }2 X7 w7 ^3 o1 x' k5 F4 e s->next=head;
$ Z3 n% S# ~2 c8 A" f: y! W$ F, A p->next=s;p=p->next;
$ D3 `# K: ]2 {1 X' F" n }
: p. p* j; O2 O" o p=head;0 j( T7 l; T4 j2 i/ n4 {
for(;;)
3 p- h( ?% E4 c2 v! A+ F5 ?- r" b {if(p->flag==1)- R$ o( _7 _4 a6 h& O& d: o
count++;& x2 m% Q( q* ~3 C; t! @5 w! C* |
if(count==N)( H- Q! G0 S2 {+ r4 ~& b
{p->flag=0;
0 N2 k4 s. C9 c# {. x } count=0;
/ O0 S# Z# ]- F1 f N) ~4 P sum++;}
9 m! \# I# q. L% q( N" B/ c if(sum==M-1)
9 F- j* z% S# G+ R( z( e break;, @$ B" e0 P( d
p=p->next;
; w0 [0 q( B1 b: T }
" C) I$ H8 r: o* ?- z1 ~1 i S p=4 o6 ^) P3 q* E0 T4 E/ @9 q
head;
7 o. ~- m) ]1 s6 j* i6 u8 ?# L for(i=1;i<=M;i++)
: J7 x8 }+ p* G2 A+ G { if(p->flag==1)
+ F& T( r- Q" y' K1 c printf("\t%d",p->number);
' a; T5 ~& A0 q5 P8 {" _ p=p->next;7 X+ a; ?& ?8 Z
}! @6 R0 S! O. }' e* v! h
5 L% p/ m; A3 Q6 n" b- v2 S
) \% N- |7 K# M8 R0 I2 ?0 [6 P
- Z! u- e2 B0 f+ H H' q6 S0 X0 d} & n- Z% S( U8 o1 |! ^( Y& D! d
第二种方法:数组
9 Z }7 z3 i6 ^1 |#include<stdio.h>
6 K. L+ w$ ]- @# t" u) E0 F* i#define M 8% Y1 u9 f2 W6 d! {
struct monkey
5 x; q; v. G5 c* i K/ b! s{int number;
# P R4 ?' z, r% bint nextp; O2 j% V% f6 T& u }- F
}link[M+1];
9 E3 M( c* d7 |4 g1 b" E
; d! H& w* I& ]9 h; Avoid main()
" H1 e1 A9 h h) w{int i,count,h;, y& A' [% o% P- \
for(i=1;i<=M;i++)$ W! M$ q/ b' H3 y0 k4 t. |
{ if(i==M)8 Y) @8 W+ Y, `" S+ O
link[i].nextp=1;& F+ R- J2 q. S" j8 ? V4 ?( z8 u
else
. d, K8 z5 Q+ \& Z6 s. _( M link[i].nextp=i+1; n4 S" e. Z) h w" A' ]+ T1 C
link[i].number=i;! N7 A! s" }4 s( c+ s: N) @) O
}
( R! t0 }4 N4 t% d' {printf("\n");
8 q# ?, M7 Z2 B! P6 [: mcount=0;
: F% a& }( M/ _7 w4 b* Y' J6 s! v" l9 G9 sh=M;
7 c. p; N# e" C8 K# V0 s( ~printf("依次退出的猴子: \n");. e& B# k, b: H) ]6 G. s+ F
while(count<M-1)
4 @' L* u- ~/ [4 t{i=0;
( c" R" P5 K7 F9 xwhile(i!=3)% h! U& A0 `( ]5 x. O% g, c
{ h=link[h].nextp;
; c: {4 D( l x7 z* b, i if(link[h].number)
% \! v2 ^/ y3 ]4 N8 { i++;}$ { u, p8 f2 \: K- D* W, t
5 m- b6 g2 }# p" l) D2 ^' R
printf("%4d",link[h].number);" N' P6 E5 u* W/ {* ]9 i
link[h].number=0;
5 X: [4 S; u0 l$ `5 ucount++;
$ X; O7 |( S/ E2 l' y: L}! l: F e6 e$ X( D
8 A. f; `: i7 Z6 e7 |( B$ Bprintf("\n大王是:");
[* D2 q( ]. `; E& C' p! r for(i=1;i<=M;i++)
/ ^) q+ P0 ]5 @+ A" q6 i if(link[i].number)3 |5 K* |" \1 z# o6 u$ y
printf("%3d\n",link[i].number);
* F9 v+ c. X& a r! `$ Q8 Q _6 ]2 |9 I' `) M' P
( n) t5 l3 b+ Q! E} # f$ c. U) _5 F
第三种是普通方法for循环( d' k0 h# d, i9 c, P
#include<stdio.h>, W; @; C* `8 [% P0 a: O
void main()& [# _3 a' i/ w4 E. Y0 t
{ int i,k,m,n,num[50],q,*p;
. y, Z( H1 m% V8 |, D2 c ^ clrscr();
9 X- R0 j' q U5 f printf("input number of person: n=");
$ r! ^+ L+ H& E$ d! l2 f0 b* _ scanf("%d",&n);0 i- i& O: A" H5 O
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只0 w* w: u9 }% R
scanf("%d",&q);- }/ ~' K2 h/ b, {3 l$ W# K
p=num;! Q' ~' b2 m2 n# A# z7 x( H- n
for(i=0;i<n;i++)& q7 U" d. @* ^" s+ w {
*(p+i)=i+1;
$ N+ t" D6 X1 u( x( Q$ ^- H$ O- ` i=0;+ \& U- [5 T- |, s/ ?/ T4 L. F( l& p
k=0;. e; l- d1 d) `4 l0 v$ k
m=0;
( C: o* g& F1 o- D while(m<n-1)0 Q, ~0 ^" m1 C2 u' M
{if(*(p+i)!=0) k++;: c# L7 J$ ? F9 w1 R
if(k==q)
: R5 ?) k# q+ p A0 T* A { *(p+i)=0;5 @6 z- P$ K. s6 d
k=0;9 ?& D6 {3 }( z) F& q4 I
m++;
3 E K' b5 E5 c; I' | }+ g* W l2 ^* |7 ]: Z
i++;! [$ n! \" U6 j1 M3 g3 T1 t
if(i==n)i=0;) a9 N2 B5 L, V d7 _6 ?: Z# ]0 a
}
6 H# @' I5 |, Z! Z7 { O) z7 X while(*p==0)p++;
6 ^& r0 P' i9 J" k. d. q* p# C4 e printf("The last one is NO:%d\n",*p);7 Z8 |9 F; M& I+ [. f
getch();
$ \1 `8 S& g: a
; k; R& m' U; q6 l} |
|