|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
8 y# u; C+ j: Q( d这几天我在忙着编一个问题,我用了一种方法编出来!
5 ?) q+ E+ ^3 [* N但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
* k/ x# P2 G" g% @$ ]" N! b注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
5 }4 g9 V6 o% u# I( x
5 a" _# B* V3 e2 M; a8 g0 @) N; L# s) W1 {3 J
题目: T" \8 ~3 F- K" S) J- E! W7 x
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
9 K) \; V+ s4 F4 U8 t! O2 H第一种方法:利用循环链表7 |1 ]& V/ B. \- u
#include<stdio.h>
; B; `/ {& B! ]/ P4 G#include<malloc.h>
) ]" [$ c2 ?) e! n% q0 Z( M$ O#define M 8 //共有8只猴子6 T( {( A, q% |: c- g: U7 B
#define N 3 //数到3只时退出第三只$ E9 z+ T) m$ D R
typedef struct monkey6 \7 Q1 r6 m8 d: } c0 g
{int number;5 ?3 {. h7 r+ H- ]% G' D
int flag;. h7 S/ H+ p+ P6 l7 g; d) W
struct monkey* next;' T/ D; T$ }" G+ T4 c( X
}MONKEY;
U$ ~( R I9 bmain()
7 N9 z& @+ a3 {! ^. n; q{ MONKEY *head=NULL,*p,*s;+ b) }6 s: X: W- |/ |0 ~
int i,sum=0,count=0;
8 d! \) Y. d: [. p v6 T clrscr(); //清屏+ w$ H/ J" i& s5 C% q5 m
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存4 l7 a5 u$ I' q+ [/ o; y- v+ p
p->number=1;p->flag=1;$ |$ R) z' O3 ?8 A
p->next=head;
$ W# m+ e% B; S, L, e0 p head=p;4 }4 l0 f. r* k- v
for(i=2;i<=M;i++)
1 K$ j5 E( \# c# c { s=(MONKEY *)malloc(sizeof(MONKEY));& `+ I) x, k1 m# G; c, t4 I
s->number=i;s->flag=1;
4 A! [* E1 f* F p, K- J/ C5 ~" C s->next=head;
; k* W) y/ ]2 |2 M% r: r p->next=s;p=p->next;
: Z6 I% ^' E5 B" B- t }4 k2 `. r. Q- M2 X3 e9 r2 `
p=head;# X! I2 \+ x$ a
for(;;)' k) S9 z; F, _0 ^+ D
{if(p->flag==1)2 _. Z# I5 a4 _
count++;
+ J% t5 H" {& |4 Q3 ~; ^0 P1 {! m if(count==N)0 n$ f. H8 W+ L) w4 _
{p->flag=0;
( P; h; A! | K6 d count=0;5 i q' D# O! u- G: N
sum++;}! E% n$ H- ?) }0 \* [2 Q4 E
if(sum==M-1)
0 @$ E) t) Q" r# \ break;
! w- Q/ E5 ^0 l. U2 v% l3 h p=p->next;) q0 l5 Y* J7 c' \' ?) O& D
}% `) W4 j! z. Y( k# C# U
p=
) r/ K @" P3 ^9 s1 B4 v) E head; j, n/ H- H1 z
for(i=1;i<=M;i++)4 [& t0 G, m5 }% x/ Y
{ if(p->flag==1)1 i; B3 a, Y _( N
printf("\t%d",p->number);
. y) t) P- X J/ j p=p->next;, Y' z2 z8 V9 D7 X
}% `3 d2 n% o2 m- i" [/ L$ X$ D
6 i! b, G9 M2 `/ g8 `: @- o+ }* e6 Z: G
5 w# F: d o, ]/ Q) S3 [" D! x7 u2 R4 m7 s; q
} # d. u Q8 l g/ ]
第二种方法:数组
) }3 b- ]) O5 V( s1 r& n#include<stdio.h>0 S' l& \$ o$ ?9 M- `; O5 H# _
#define M 8
' Y* S# z: _0 Rstruct monkey
+ h& j0 ^- ~ R. B{int number;
" [+ J# m+ P7 A5 B* tint nextp;
( n2 f4 F* m3 N2 ~/ a4 l}link[M+1];
! w0 N! ^6 ] ]2 j3 D+ z- r" h) G8 W- o/ I
void main()
6 T" J8 u# |% v& m! }+ |{int i,count,h;2 e, [9 N# D$ d( G
for(i=1;i<=M;i++)- z% S# \6 [5 z4 h7 E5 _/ F1 k4 q) S
{ if(i==M)! v# t4 D5 U- S2 _' x
link[i].nextp=1;
( t; N; S2 [' ?" n; s# F- y else' A2 U, E$ ^, E
link[i].nextp=i+1;
i2 V! F/ l$ o0 B link[i].number=i;
, D" N' p9 C) m: b5 o% U# L5 j}
1 p/ p( m* K6 h' k1 c) [( pprintf("\n");
3 N& C; ]8 E# d6 q) Ucount=0;
) N; i2 M q! z4 q) [h=M;
/ r0 ]. U) A9 `# J- W. q5 Q1 c. Qprintf("依次退出的猴子: \n");
- I! k1 l4 Q. W+ j1 |while(count<M-1)
7 ~$ d( {$ D0 I# A: ^, `{i=0;
8 l0 d( I* ^; S4 `0 awhile(i!=3)6 l! ]' T" n8 x* Y) H5 R
{ h=link[h].nextp;
+ G4 @/ n+ I5 a if(link[h].number)
9 e: `/ ?' b S X' D i++;}
. z1 A0 b% w7 j& R) H1 O5 m. g/ ~8 Z1 @* J% M. x& _0 R. _. e
printf("%4d",link[h].number);
9 A. F& q% j9 g1 I! M6 F% q3 F" Ylink[h].number=0;
, t; v3 }% _& N ^count++;6 E1 y _- z8 C' u! b
}4 L: C A- o% N% M* `, H
0 {! g2 i+ ^7 M/ n3 O- d- O( Wprintf("\n大王是:");
# `: J" f9 ^8 a0 c5 v for(i=1;i<=M;i++)
3 Q" ~2 F: Y: _- [2 ^" R+ A! j2 U if(link[i].number)
" U+ q4 i3 b$ R) N printf("%3d\n",link[i].number);8 X& q @2 f" y, Y8 [) \
% h. W% w+ v3 X6 h1 Y! g1 G
' J' h' Q& q, `* n( x- {7 r} " p! V9 E# ^, T0 b1 {( T1 F* N7 R
第三种是普通方法for循环# _6 E: k5 S& {% @
#include<stdio.h>2 t* q1 S0 y: t/ m |
void main()+ ^- l* q) ~! N! Z4 S3 U0 a* p. L( y
{ int i,k,m,n,num[50],q,*p;
* V' [$ L! V. Z1 \1 Y clrscr();3 h- Q' F8 I6 x0 p4 X1 K
printf("input number of person: n=");% R' a* s% S6 w# N8 @2 G
scanf("%d",&n);
6 ]* [* L. `6 F& ]$ d6 \printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只: e+ r: K0 J. y2 t* ^
scanf("%d",&q);5 b! |# s- _' T# \
p=num;
F* f) C" `. W! D5 x for(i=0;i<n;i++)& K ?$ ~+ w5 S6 P" V" _
*(p+i)=i+1;
6 L! a# N! f2 c M6 X i=0;1 V1 K' O4 e! X# ^& Y
k=0;
$ M2 n" g' @& R* N: p( W4 ^( f m=0;* M3 }4 h' g4 _' L3 A2 O; i4 a, D
while(m<n-1) Y% [- O0 Z+ s
{if(*(p+i)!=0) k++;% e. B" [: L G" J, f
if(k==q)
+ {1 ]0 L; q( j9 |) G& X { *(p+i)=0;1 P p N; G) J
k=0;
5 D& R; E, G" N- d1 B m++;4 J! }9 I( s' ~6 P* W
}5 ^$ |7 P J+ G7 O% \( E
i++;
& X0 i2 v% F' I0 y: Z$ a: u: ~ if(i==n)i=0;
% \. ~9 C4 J/ R) @ }( T' W& b, c. ]- w! B5 n
while(*p==0)p++;
" _4 y; B- @8 z" c* H! J& D printf("The last one is NO:%d\n",*p);6 s# v; _6 G9 M, p' Y9 j- }
getch();
& I+ \% s" n' S9 X1 }( w( t
( Z/ X% S; Y. [7 y" I} |
|