|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
N6 `; H8 y) f2 Z: j" N: O% |* u这几天我在忙着编一个问题,我用了一种方法编出来!
; F, M8 q, Y" ?! w8 r- o但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
/ Y2 t* u8 u9 U) ~/ a3 k" O注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 8 i2 d$ I! B' N: F' A6 n
, h5 z' }& L) R1 j5 h9 M
2 A$ t( M6 q- I( U0 R 题目# {$ A/ W: i6 @4 N* C0 G
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
- U( ^& e* H4 X) z2 v6 p/ ]3 L第一种方法:利用循环链表- C$ g! X$ a* g8 z h
#include<stdio.h>
; _" Y0 H6 x* b$ |+ V2 f* m#include<malloc.h>5 C9 \$ a+ ] R) m6 j: _; R" ]
#define M 8 //共有8只猴子
3 X# u$ K: k. B#define N 3 //数到3只时退出第三只
, ~( ]/ y2 b6 o0 T0 I5 S% Ztypedef struct monkey
5 `% f( v: X+ F- @; l3 |1 f{int number;
, ^& z% I' d# P* i8 C! gint flag;4 f* j# e' H" }# s$ g) {% R
struct monkey* next;8 l! n0 }5 ~+ v2 D1 h$ H3 k& j! u
}MONKEY;; z0 n% e3 Y$ N4 Z& d6 D
main()
5 C- @. M F, N0 B4 p+ `3 N{ MONKEY *head=NULL,*p,*s;
8 D; b/ T b2 w! m* o int i,sum=0,count=0;) V2 p, Z- d3 _* F. I
clrscr(); //清屏. m7 w- B* T. a
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
( C; C% B: X0 a* a i p->number=1;p->flag=1;
m: `, V/ Q( o" a! \; e1 r p->next=head;% [- A/ }8 S$ M V, Z# Y! h' t# X5 L! B
head=p;
7 U) b. i( ?' G7 O for(i=2;i<=M;i++)- o" J6 P3 M% V" H
{ s=(MONKEY *)malloc(sizeof(MONKEY));
4 Q$ |9 ? U m s->number=i;s->flag=1; b* I1 D9 y8 }# c+ I I, e
s->next=head;$ l3 d$ C6 B1 h
p->next=s;p=p->next;
% J. R2 c, G3 o+ \; `2 S }
3 J% i8 [8 o9 P' i p=head;
- J# E6 k+ E' Z for(;;)
& I' K# @7 u9 _4 ?& p) c& w {if(p->flag==1)- N9 R$ }6 e# |
count++;: ?% J% U8 N! u5 I6 Z
if(count==N)5 N! Q4 n( B5 }$ l# s; _2 l
{p->flag=0;
7 z8 T L. F% \! J count=0;* A! y1 s F5 @- p! t% ~
sum++;}5 r7 D0 }+ \6 L5 C4 J5 ?/ z& j
if(sum==M-1). g9 b' k$ d/ @
break;) y+ O. n0 |/ {5 E, {- | j2 O( X
p=p->next;0 ] f9 O# F8 F# _/ A8 p" y
}
, X6 E/ @( a& Q u2 ? p=2 X4 a! F$ `/ K5 `0 l F
head;
- X$ P B$ N) e; m2 O4 f1 V* k for(i=1;i<=M;i++)
7 Q8 |2 B, g$ u* X4 F# i" x { if(p->flag==1)
* l+ S n7 U8 I printf("\t%d",p->number);4 _- I! F/ A) ]
p=p->next;
" Q7 v F& \+ W: {% @6 G9 ^+ G1 K }
1 z5 x. N, m4 m2 G2 |5 m; w% M8 O) o, o# V- R4 ?6 V A8 o
: b1 D; @$ i9 H
0 m" L O' \3 `8 f; L} 1 y0 ?* k) }- O& ^, h# l
第二种方法:数组
w& g/ D$ \! G% k9 `#include<stdio.h>
" W0 H! r0 B7 F: j: x& N+ m U#define M 8, K4 L: I9 O& I5 j$ i4 i: e
struct monkey' Y( v' f+ T% ~. J& q
{int number;8 c9 J6 F8 M# T; |4 n3 @
int nextp;
$ B" U5 K9 _: f: C) q8 M/ D0 a' O}link[M+1];- X; H4 g) ?7 b$ Q4 Y( r
4 e' V5 z ]; R" r+ |, f
void main()
/ Y# `* G8 u) B/ m h{int i,count,h;
$ A3 l7 i% F" D, M8 t: y% B6 Xfor(i=1;i<=M;i++)
' r% d0 J' e8 s5 A" @0 s; h{ if(i==M). ^ D0 G0 B2 {# ]' n5 U
link[i].nextp=1;
6 |7 j& V# j5 @' E5 B H+ ? else& F5 O* F$ [$ b* y/ @! I9 I
link[i].nextp=i+1;
' a7 r7 @; l) Q7 _ link[i].number=i;, j" I4 c* L: l: m4 f$ w
}
. y7 o- i# Q, i2 dprintf("\n");
1 R; _+ w+ o2 M) P- f) Ycount=0;2 E0 r0 z: m' l9 f; v
h=M;
. _2 L1 {/ ]6 N3 m, Rprintf("依次退出的猴子: \n");* H1 F$ K! f2 z7 f* e
while(count<M-1)
7 C$ ~9 `; T0 ]( e; \! R: ~9 r# Y% n3 x{i=0;! X& Y2 T4 u/ _2 a, L! x( ]
while(i!=3)$ I$ U9 V$ v4 J) G; ?) p0 @ ?
{ h=link[h].nextp;
. }' V! K+ ]7 |: {9 R* w if(link[h].number)
7 j u- V1 j6 j/ S& { i++;} @5 L% Q Y8 {' H+ @
- v, j5 v% Z- r+ w* K5 xprintf("%4d",link[h].number);* Z- B, ?3 v c' C9 c5 k( ?0 O
link[h].number=0;0 G2 _9 f. }0 M3 l
count++;) a+ u+ r& R5 V. f P
}
0 c) d% I% x7 F: J2 Z$ X2 T y$ l) m/ ^6 q0 L% g
printf("\n大王是:");
& Y: ` A# t" k' D for(i=1;i<=M;i++)( V0 x. R# g. Q( g' t0 r
if(link[i].number)) N2 R) Y5 G( _% E c0 R4 X2 X
printf("%3d\n",link[i].number);' U8 ], c# _. I
3 ?* X- T! Z% K6 `$ i' |8 [+ @( X* h! T
I9 y1 V6 h/ R- L
}
# Y6 u/ O* L+ \5 U第三种是普通方法for循环% j% e* c. ]6 ]' ~& }" a4 x P
#include<stdio.h>. }8 ?7 B5 n! b' {4 t
void main()$ v5 n: \' D0 G9 n' m1 c; \% ~8 q" d2 f
{ int i,k,m,n,num[50],q,*p;
2 y! Y8 o( ~- Z k clrscr();: C) r, v6 _1 l$ l) P) P
printf("input number of person: n=");
% s2 F/ |$ D2 @3 e# Y scanf("%d",&n);
# Z! ^9 d/ C1 f6 v4 Bprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只% p9 v9 [- [$ S: ]
scanf("%d",&q);
- F2 K u- ?9 N3 z% n1 r3 s p=num;* R% L" M; R A5 Q: N
for(i=0;i<n;i++)
$ `0 i" N6 n; I- p2 q! }4 R7 c *(p+i)=i+1;
8 k. ?) L% V/ t P e% X; x" N i=0;$ n8 e* ]$ E4 a8 d5 H+ Q/ a0 e
k=0;
& c" J! y7 j! x& E m=0;8 n' y8 }2 @5 f1 F! `+ H4 y; I
while(m<n-1)2 |6 P9 }( k- z! z
{if(*(p+i)!=0) k++;0 O2 |; i4 n$ k) I8 h
if(k==q)! g- k- Z( v2 f$ v2 ?' C! Q
{ *(p+i)=0;/ g$ H3 Y" O g9 h, q9 V
k=0;
4 K b: Q; @/ E' Y' v4 ^. A1 X' N m++;) ?% a, l7 I5 a* m7 C( g. C
}0 K0 `! I. O1 G) v
i++;
/ l' v' G% Q2 Q% ~; U, l, M; {5 q3 n if(i==n)i=0;
4 f( d6 f. E0 ]$ l/ C }
, M. P' X1 w2 c& V while(*p==0)p++;
7 U: A3 m6 h# B2 l# x8 c* z6 M5 } printf("The last one is NO:%d\n",*p);
' i) l7 U$ N/ |2 f* C getch();1 _& Y! B0 M4 j2 ^
7 h1 O' _! @9 h1 D/ X$ }
} |
|