|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!1 X% P- G) u2 I& j1 S- M
这几天我在忙着编一个问题,我用了一种方法编出来!
$ i% W: r1 E; l. V7 t/ ^但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
+ H% p& o( h+ v, U注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
! p+ X# i. |* H/ e5 r
8 N- d. j& }: b. a0 }. S7 o8 M& P+ d. A5 }, k- y
题目
B4 k+ j0 ~& r( X! u4 e2 G山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
7 b0 ?! P: r8 y4 Z) P2 I6 S, S第一种方法:利用循环链表6 L0 @+ T, X$ |4 a
#include<stdio.h>
! F" m1 r3 @) C& I& I& a/ k; K( w#include<malloc.h>
) p, _% k* Y- R#define M 8 //共有8只猴子2 E+ H$ ^% y; s# |- J% ?
#define N 3 //数到3只时退出第三只. `. V4 s7 N- y
typedef struct monkey
( h( R8 T* r+ d{int number;
: j. n. I( ^, k, l" Yint flag;
, X3 A( r$ X5 p2 |6 k/ qstruct monkey* next;
+ E: B+ F9 t9 T/ d" X: f! D}MONKEY;- T( r$ i6 L+ ^" f X5 Y
main()
' }; U7 y/ x8 _( g" b9 e{ MONKEY *head=NULL,*p,*s;
d; k* i o3 Y) o9 \) M int i,sum=0,count=0;( p; N0 s7 O" O, N2 I9 }. V
clrscr(); //清屏
# Z. G$ l: T2 { p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
' N% J( Y1 T7 ]( ~' w+ R p->number=1;p->flag=1;
& j; G, d7 [5 U9 ~$ d6 v- _ p->next=head;+ S5 Q& {& { }/ m) p
head=p;
; z. a& z, s, f* k, j! e" R for(i=2;i<=M;i++)
1 S; m" }. o+ O% \: m! d { s=(MONKEY *)malloc(sizeof(MONKEY));
% I# z9 g- I! n% _* f% p: b9 U s->number=i;s->flag=1;" ^) q7 S2 k6 A7 c [
s->next=head;+ K I+ O8 t" A9 d1 G6 o
p->next=s;p=p->next;
4 J0 l7 J) ^& y( Z; o }9 B& n( w; S D' u
p=head;: _' g6 v4 ]* S9 A9 m
for(;;)4 P9 b% a3 i! d, y: i* T
{if(p->flag==1)
& E! l- C* M# J5 z6 Z* X' w7 o& d7 e; { count++;
& f0 a4 Z: u9 m if(count==N)+ T2 K, ^; j$ f( Z# f
{p->flag=0;
, |$ e' O9 |( @% x$ @, O4 O) J) p count=0;
- C" X9 D: D1 b! Q& B0 C3 Y sum++;}
" N0 M9 M. Q W* b: S* J3 z if(sum==M-1)! a+ n* u( j3 s7 w
break;
/ a- @3 e: I$ c& j p=p->next;0 Y. |4 |- O ~
}) b7 c6 O3 g/ R' l/ p+ V
p=
) c& V1 s! \: @5 j head;
$ t3 g1 d/ X X* P9 l6 h0 w for(i=1;i<=M;i++)- _/ w0 J' w6 m
{ if(p->flag==1)' J: D1 v& V' I/ `# ~" ?( _" e
printf("\t%d",p->number);
9 C4 c# e$ [9 J4 r5 a. E7 m* | p=p->next;; O1 K. ]) X3 P( b* v+ W
}
6 F1 e2 z, u0 H* q/ x3 j8 u2 m* E
! [! @5 [' D1 Y: |
8 w5 I- F( O7 a' R6 }}
) |* v. G7 E, K第二种方法:数组8 U; Q5 K/ ^4 f7 g) |' e3 M
#include<stdio.h>& m' W- x) Y! A" f
#define M 80 @# R. i& t: f
struct monkey; E( D4 X. V& m% i) t
{int number;
$ C2 V1 I8 W! [- s9 Cint nextp; K& p' w- L. g* X* b* H" |
}link[M+1];/ Z/ v; O+ g' H
" F) ]% ]6 w8 \( d$ c- k
void main()
0 @; n2 J+ B9 |# @6 b1 g{int i,count,h;( Z9 A) O" e; g4 a2 f
for(i=1;i<=M;i++)
2 G; V$ k+ P7 V" x$ x{ if(i==M)2 i$ D0 ~5 R. ?3 k* C- |+ K& r' b* t
link[i].nextp=1;
( ~: b! E; V# t! t else1 W1 L5 C* S0 k" F, i/ C
link[i].nextp=i+1;# _8 j+ H i+ ~( z8 f# |1 I
link[i].number=i;
* o. \9 _' X4 g) K% Y1 u0 H9 R}
1 g( A9 o' w; P9 ^) Y( x4 oprintf("\n");
: B6 k; c( _$ y. ^; L& x0 R$ J2 Jcount=0;% E# K& S; M4 [: z3 R
h=M;# h0 d! c2 L- R* ?% I* @+ b
printf("依次退出的猴子: \n");
# Q% P' u* _: U& rwhile(count<M-1)4 H! h @4 H9 X/ O
{i=0;
- u" J; u1 M9 p- j J1 ~5 l; @) pwhile(i!=3)
8 O5 [8 @2 }: X0 V{ h=link[h].nextp;
7 A+ L6 b2 `. Z \ m: J' H" ~# }# f: B if(link[h].number)! L7 D {. I+ F1 s, n/ O
i++;}
2 T# T4 k2 S0 z- c E! {2 J1 |& `. p" S, l; E5 \' ^' U/ j
printf("%4d",link[h].number);' ?& y, ~) k: ~2 z2 Z
link[h].number=0;
* D) s2 M: L& ~count++;! F! F, x7 y, A
}
; R6 `0 _& _+ K1 ]
" f, c! K; \* x) j8 Zprintf("\n大王是:");
! A6 F9 k& ~1 { for(i=1;i<=M;i++)
r G! Y% J6 }( O if(link[i].number)
6 i2 n& k3 B- F1 C1 j# F0 q* ^5 I, G+ [ printf("%3d\n",link[i].number);. I. W$ t$ a! K- v3 a4 M% D! ]0 `
/ p" z; u: V) w, `7 P \8 e* {9 t" E" A
} 4 o( P* @) ]* R( H' Z
第三种是普通方法for循环
, k3 q4 f% X8 A( y3 a) C, v#include<stdio.h>4 y6 Y2 \/ Q& Q0 V) j4 \- f) {1 k
void main()
: i$ F/ v! p, D7 C! t{ int i,k,m,n,num[50],q,*p;5 \( C5 x" _7 G/ x1 v; D# B
clrscr();
- h) I* `" T, b9 D9 s0 } printf("input number of person: n=");" V/ f0 S- k9 F
scanf("%d",&n);: Z0 k9 X: m2 C, i8 w9 \+ y
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
0 h) ~+ V. p8 Y8 Y; j/ v scanf("%d",&q);
/ m$ Y& r- D, ]0 L2 \2 Q p=num;
5 ]1 t9 Q8 _1 j for(i=0;i<n;i++)2 M2 Y7 y# v; ^4 D2 J8 F( x5 I2 e
*(p+i)=i+1;# D. u* |4 [% |+ ^6 _ V8 O
i=0;
) N; F" {& K5 C9 B" i0 v" _ k=0;
. @5 F, k# e3 R; J m=0;( ^/ R- I! v8 C K& o
while(m<n-1)
2 b9 w1 }4 m/ r {if(*(p+i)!=0) k++;5 G1 A1 q# m( k, R @2 ?
if(k==q)# X- c7 v! w3 I% h" C; @4 B
{ *(p+i)=0;' N0 N$ f0 a/ p u4 s( h; U
k=0;$ d* f- m5 o: a/ z, D$ m4 e
m++;
/ u) H6 y7 \6 v2 ~ }3 ]2 o4 @( f( H5 N, t! i$ t
i++;6 A& E" ~1 L8 e. z% ?
if(i==n)i=0;
, B) O) w) ^" t3 X' v& p2 s( t }
) J; v! t6 R$ |0 z# F while(*p==0)p++;1 H6 P# f [4 m& l" a C
printf("The last one is NO:%d\n",*p);; b- e4 }& t5 d- G1 d! o1 L# d4 X
getch();1 ?/ O; T5 s6 F
% K& H5 N) U$ W
} |
|