|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!# T0 h! O9 W0 K! M0 P+ S4 F5 j B, g
这几天我在忙着编一个问题,我用了一种方法编出来!
8 j- {* M4 e: w& r/ C但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!$ W3 U v; M+ g0 `, h2 b! t
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 # q; @. |9 [! \, j5 {! f
. X1 X0 B; K2 f" a A' m
* }" F. t/ a8 X1 w; r 题目
* m( T1 |' I% F' R: `" w山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
6 r5 y4 `% p$ p; e2 s: d第一种方法:利用循环链表/ i2 K+ R* d! g3 u" V" n
#include<stdio.h>
9 H7 x/ V8 @1 v1 J#include<malloc.h>! l% Z6 E% V {! K! ^5 _6 X
#define M 8 //共有8只猴子% G5 E' c8 ?( L6 @" u
#define N 3 //数到3只时退出第三只
# y% C! Q1 f7 f( X: e- y# dtypedef struct monkey
+ Z2 e* I2 k( P% u# B0 n* V" U" ]{int number;: X, E, I E2 x1 Y
int flag;; a+ ^( X6 G' y! I, f6 ^, P
struct monkey* next;7 f, y4 [2 \8 }. }
}MONKEY;6 h D" F U4 L5 V! G5 n" X' W
main()) \6 j4 \6 D/ @" x' P
{ MONKEY *head=NULL,*p,*s;
# d, F' f5 i" `- ]2 a* S% t int i,sum=0,count=0;
2 A! J2 C* p0 U8 x% g clrscr(); //清屏7 r+ Z; J$ z* Q. }( E8 c6 x) U
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
" Y" h) c+ h5 S, D: z# u* ^- h p->number=1;p->flag=1;0 {% z' l2 R$ P1 z4 K; R. e$ F
p->next=head;
4 ?# G. J! Y' X6 ` head=p;
) ?, s5 Q1 X/ T9 j- N for(i=2;i<=M;i++)
& f! B+ n$ A" T { s=(MONKEY *)malloc(sizeof(MONKEY));; O) d0 s% |# q9 y5 c
s->number=i;s->flag=1;
. i) J4 l5 b( k; v m s->next=head;
' k% N% y% L6 d( t2 @. T p->next=s;p=p->next;
3 ], _* \+ @. \1 m3 j" R# D" m! t }
5 t5 ~- T! p5 F7 Q3 y1 _ p=head;( V2 C$ R s1 j* b2 Q+ E, g) a: t
for(;;)
2 K) _$ W e4 N {if(p->flag==1)# U: p4 P3 h+ j( i% o
count++;& J4 ~, z! }7 s
if(count==N)
: ^, V1 o) b# e2 p! ` {p->flag=0;
$ F1 x2 I$ F( j+ [5 ]$ Z9 a count=0;
/ K) {4 A0 o# E sum++;}
/ U; z& D7 N( j2 s, [: ~ if(sum==M-1)
0 j0 G* J. {0 P/ a break;- s' V/ O- Y4 a) Z$ i% E* m( M
p=p->next;
: S/ v9 i' D1 ? }
: H/ r5 \5 O" ^" ^* m p=+ J9 |4 ]7 k2 O/ t
head;! t0 f: d8 R: G6 v9 C! t
for(i=1;i<=M;i++)
* _& v7 o) f" R { if(p->flag==1)
8 n" M- ?) l/ U9 `# w1 h printf("\t%d",p->number);
: K6 p0 Q0 ?3 K+ m2 c p=p->next;: _/ t' E; t" x3 }9 Q
}) X* B2 G3 C: u/ g' R
/ y$ q, H& K1 Q( E# ?
9 Q- u& Q) n6 h3 A- h( R) F! w) d. M. [6 U ?
} # Q1 ^" s% p4 [+ O$ H4 E% h( b
第二种方法:数组8 D8 G: C$ v) s2 l- |; ?
#include<stdio.h>
: G0 q5 T) c& K#define M 8
+ ?, S# S4 h* ^3 k! fstruct monkey3 e( |. a! C* F4 w9 ?( @
{int number;
7 b. t F, y% Y' w2 zint nextp;
! @! U; e" M: A" j2 X% t}link[M+1];( @; E; @ v# {8 h7 E2 S5 y
?3 E6 m. r8 S4 B
void main()) m0 e- B$ H7 i1 t
{int i,count,h;
7 d7 |0 T. y7 R% ]6 d( X# D; Tfor(i=1;i<=M;i++)7 y6 M# ~- F- l |* L" q& @3 }6 p: k% h
{ if(i==M)) o7 b) \1 i7 H7 z
link[i].nextp=1;. ^; B' Q" @. R2 X: t' b
else, h- C5 h7 v! |, G0 U$ }2 P% I
link[i].nextp=i+1;3 n( k/ K: k+ W1 n
link[i].number=i;
( j; Z% i, c1 s}
+ } Z5 Q/ E# c; a# K2 mprintf("\n");" `' f) W, Y$ r8 L
count=0;
% Q p( I: z2 t/ I& \h=M;4 z8 ~7 Z! t; o# X _/ c
printf("依次退出的猴子: \n");
& V- l+ }8 @7 r3 c7 G( k$ J& lwhile(count<M-1)1 E4 o a8 s0 _
{i=0;! i, e9 e W7 e! m, D4 o
while(i!=3). U" f) r2 J& p6 o, a# u$ }) |
{ h=link[h].nextp;: t, \7 x. G! |+ O
if(link[h].number)
5 X' i8 D1 T: Y; X2 D: m- z: { i++;}" F! \5 l" P2 p% v* z/ L
0 {0 P8 W4 f6 V0 `printf("%4d",link[h].number);# {9 }+ ^5 g3 y9 ?* l1 l; L( N: {
link[h].number=0;0 P, _ \5 `# F4 P
count++;
" S% n( d7 g: C0 O. [6 x" s* h}
+ s+ C7 z, _! `1 Q
" R& M O& [" B6 t0 h/ h) Zprintf("\n大王是:");3 Y. D: _! x4 B& E$ A5 `5 v
for(i=1;i<=M;i++)' l9 y, D) D. m' b5 e* S0 C7 H
if(link[i].number)/ e) x4 F8 }1 j U8 `6 A* v1 Z; H4 o
printf("%3d\n",link[i].number);
& e2 m8 [# Q8 o4 T6 E: ]- G' Y6 n$ _6 d5 d3 D# d
) I: N7 z+ n; T, _; o! N}
( ^+ F( w0 }2 q/ m第三种是普通方法for循环
- d: @6 x! B" {1 [9 [#include<stdio.h>* K5 \8 W0 m( Q5 Q/ D" V
void main()
0 r% `; ~0 B+ ` f# D{ int i,k,m,n,num[50],q,*p;
' e6 }( y2 Z: ] clrscr();
9 a8 c+ w" n( K printf("input number of person: n=");1 H9 M+ _4 w1 F( H( m
scanf("%d",&n);
" l3 a! I: G3 r- t$ \printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只. K+ }) Z/ b6 x# a
scanf("%d",&q);
5 V9 S$ q$ S; A+ T9 H8 { p=num;: W1 o& x$ m/ M
for(i=0;i<n;i++)
' ]' Z- y; t/ |+ S) A* z: M7 N n *(p+i)=i+1;
) @! d) m. r7 H3 C- c i=0;+ P: N5 X4 ]- F2 F1 @! [
k=0;2 t! a8 w$ s0 N3 \1 H* j
m=0;% t! \$ p' U4 P5 @1 U- c/ x
while(m<n-1)' @8 o0 Y: |' c0 g& I" m5 D
{if(*(p+i)!=0) k++;
- W/ p7 e1 H `2 ~4 q) W if(k==q)
# ]: g% }3 w2 `" H2 F { *(p+i)=0;
. e0 U( Q" ~, D' X1 v7 S9 H1 J k=0;5 i+ `+ |7 I6 o
m++;
3 b( m( p/ r( R7 o3 d }4 Q: V6 s( }+ i
i++;+ z# ^8 |' {6 p( f9 e
if(i==n)i=0;
" `( O% A) k% b- P' ]5 x/ ^ }: c/ Y' l) t4 h! G' Q. W
while(*p==0)p++;6 q& Q0 M$ j6 L5 m5 U
printf("The last one is NO:%d\n",*p);& c3 ?0 C) ]1 b3 S4 V; H
getch();
) E0 w# Z1 @$ H! Q6 q' [; ]' K2 g( i$ u+ a$ D4 M
} |
|