|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!, @7 p/ z* c: j7 R1 y* f
这几天我在忙着编一个问题,我用了一种方法编出来!
( M) W) O/ X- p; B9 ?但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
' v) X" C9 y! t7 K( s7 N* F注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 ( p- s, O5 ]: D7 i' w1 ^$ Q6 z
, U! r F( L# Z" R" S' P
4 u. r: M. d" B( j7 B0 f5 d8 B5 q" ^& Z
题目
0 b# b2 i. K i; s# q山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。4 G" e. N) E2 V
第一种方法:利用循环链表( q0 d* F* n; I# O2 x, l: a% \
#include<stdio.h>, B/ ?9 R: E% w2 R
#include<malloc.h>6 w s0 B/ v' L
#define M 8 //共有8只猴子6 o9 y- X- Q8 H( P" m$ y2 l+ u0 D
#define N 3 //数到3只时退出第三只
, v" _' H5 z' k' g0 K) jtypedef struct monkey) {9 w% A! G/ P9 c" d
{int number;
8 ~- A+ b9 T: C7 g* }: Q8 Bint flag;
2 k# f w$ N) p' T6 }1 o( ?& ~struct monkey* next;: m3 L7 S: Z5 F7 k
}MONKEY;0 Q: V( n' q8 E# Q% d, q. c7 _
main()( I( t5 w5 \3 k u
{ MONKEY *head=NULL,*p,*s;
6 r. s. g7 h1 D& F int i,sum=0,count=0;
9 \( w: r1 f3 Y3 M: }) M9 Z clrscr(); //清屏. D I) V) }# O: t
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存8 z. e! s( l5 y1 D, U
p->number=1;p->flag=1;3 n9 u' f6 z# E' l/ @9 t/ c
p->next=head;* u8 D3 |+ B1 ^+ X0 Q- z
head=p;; \) P0 b- m" f4 j/ W9 w3 L
for(i=2;i<=M;i++)
/ n" x; ?$ _3 t* ? { s=(MONKEY *)malloc(sizeof(MONKEY));0 p3 y7 }/ ~* ^
s->number=i;s->flag=1;3 P- h! F5 |& b3 y
s->next=head;" o% T8 ^' e+ t* Y Z" F6 M, u+ c
p->next=s;p=p->next;
9 `. ^/ i" A6 Z }9 Y1 l* G8 g& L; T, e
p=head;3 o2 f2 l: m0 z5 `) ?' w3 P6 H
for(;;)6 V+ B! P$ I7 x l& e' X
{if(p->flag==1)
+ ]- `: V) q$ \; U5 q) R. w: g8 m count++;
, H% C }! o! x1 B+ Z+ ]! v; E if(count==N)
" R( {/ C. a2 q2 k7 p9 J j& U {p->flag=0;
3 j9 T0 E$ |# H$ L+ r' y" N count=0;+ {8 e y* {5 y
sum++;}4 J6 O$ L% L5 l% Z3 [! ?
if(sum==M-1)' j' i/ Y8 Q, l- {/ {2 {
break;0 [$ s; l% g/ _* ?% a. B
p=p->next;( N$ d5 a' t& l; r- r) y5 O
}
" I/ K9 x) @+ M! L& x p=# z8 f3 V: d4 I. N7 W
head;' _8 J5 [: a. g
for(i=1;i<=M;i++)# v5 x W6 F0 }; c& l
{ if(p->flag==1)1 z* O& R$ D1 {' _1 q$ ^: m
printf("\t%d",p->number);
A- {0 t' g& A% N p=p->next;0 z6 E1 A) u0 D/ L. }
}& l' C7 f! W$ R5 t, \
" k& A0 `$ z+ |7 P3 c& b. {
% Z" d0 R# `3 D
$ C' z2 ~$ F$ h6 n}
. Y7 C# A- g& g/ h- |第二种方法:数组
( S b" |( U+ h; G9 n* \#include<stdio.h>
6 b$ E8 Y% b7 U% o#define M 8
0 T& ]0 ?2 I' `& K; t i8 sstruct monkey1 T2 u, S& H% u- j% d0 G! R4 w' u9 v
{int number;
$ N2 z' B4 U3 Iint nextp;! `/ U# v6 v) Q& v; |
}link[M+1];( a* K/ h3 C/ Y
# x( b- m/ S- p1 H5 Q. e7 M, X- ^7 Nvoid main()
- S) Z, T( x" @+ e# @7 M% J{int i,count,h;
8 }: s7 W0 V+ Z5 bfor(i=1;i<=M;i++)7 s, [+ A9 L. U: _, j: ?
{ if(i==M)
# @3 f. A& E8 E* L7 r9 t link[i].nextp=1;
# |! x i x; p& S) y/ n; w E else
: T! h" m* b( Z7 G( { link[i].nextp=i+1;
- d: i' |2 o; R link[i].number=i;* u& _3 q0 f8 s5 k4 d5 |
}
; v8 \! U+ |2 J: s0 P1 zprintf("\n");
# \+ {% Z' t- N, W% J/ M( lcount=0;
1 M; h+ V$ U9 ^' { K7 _9 w8 uh=M;3 _4 {0 b- V U$ L
printf("依次退出的猴子: \n");, T" s$ t: t6 n0 e6 d
while(count<M-1): T& \" D3 G. G4 H' p, E5 w4 E
{i=0;
5 a! ]2 d3 O" S. Q: H$ |while(i!=3)
: o; G2 M3 c+ m! b+ X2 f{ h=link[h].nextp;
0 Q7 P) _- U9 E9 D* D( h7 Y9 r6 H if(link[h].number)
& _9 K- \1 I3 G; h" |- o i++;}" h P1 T! T; R; K7 W, ]
# m$ }' J: r2 w, `' u# Tprintf("%4d",link[h].number);
$ _' Y- N; K4 ?7 _0 d! b4 [link[h].number=0;
8 N, E3 P+ n; p8 Q# Wcount++;
* R/ k \% \6 C2 _. @3 g2 o}/ E5 Q/ `( x7 D7 v v- H
. u- V# N) Q( @& D# f u
printf("\n大王是:");. z6 C; t# u# j8 x
for(i=1;i<=M;i++)
! G$ E6 k) f# C; Q Y7 r2 q if(link[i].number)
" l8 T: F( |# e$ V8 ~1 e, E printf("%3d\n",link[i].number);
- o. e/ X! C x! p: r- O- u
! b; C' T* B. w7 Z4 t' R/ n) v) n, L" b, z2 {9 c/ q( j
} 5 K) R7 f) K0 p8 Z2 e
第三种是普通方法for循环( R6 P3 l) o I6 o3 K
#include<stdio.h>) R9 N. I# R3 I4 D
void main(); {+ s6 {# D+ C
{ int i,k,m,n,num[50],q,*p;
: I5 \( x+ P. m clrscr(); V0 Y8 G6 J8 s% Y! T- r$ k! \+ W
printf("input number of person: n=");
/ t( \4 ~9 ~/ k/ p7 e0 H- ` scanf("%d",&n);1 H4 T( Y" b# e3 ~, W0 p9 ?
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只# ?; c: m8 ~; H5 {/ v( }% Y
scanf("%d",&q);4 E, U1 |6 }5 y5 k9 Q6 c; U
p=num; m6 ?4 p! P, W" m* S
for(i=0;i<n;i++)9 B' q$ h; X* Z9 D( a l! X8 S
*(p+i)=i+1;
7 x' [8 w. f D5 e i=0;
2 D$ K5 P7 \- l- N* F1 y: B+ a! C k=0;
* Q) P% B* ]. b7 |! G# }' k m=0;
l* Q; O+ j" t while(m<n-1)
( \' x( v2 c8 M3 ] {if(*(p+i)!=0) k++;4 W; f6 t4 @# V$ M3 g
if(k==q)
; y$ y' @: S( W { *(p+i)=0;1 r+ q n( p" W" `' C) _# L
k=0;8 H. g2 b) d- v7 v" Y
m++;
/ N+ G: f+ L# | } }' P. I; W- C* ]8 b
i++;
$ ~# k" h! c: d. c. \" p if(i==n)i=0;: ?. ~! `- |' @& t1 ]! [! Y
}: z6 X) T' ^/ F; K
while(*p==0)p++;
" Y' _! v/ ~ R8 M2 w# D printf("The last one is NO:%d\n",*p);
- f8 G3 j5 [# z, a0 H% o( j getch();
/ `8 P5 \4 t3 M N4 }) m, O9 w# M
6 |5 H) E( ]1 g! c- m6 c0 z} |
|