|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好! g7 A6 O! t1 v( A4 `+ w
这几天我在忙着编一个问题,我用了一种方法编出来!* d3 r5 k# U5 i6 Q& G" l( g: G. e
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!5 v: J3 e% l# t
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 % J1 z" J( w7 {! s# X
0 {# v4 [; ?0 B5 h; j. W- e
6 Y) n% i! l6 O ^
题目# |$ {/ i" c& o I
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
. D. Y3 k/ k4 r; \5 u9 E) g# j第一种方法:利用循环链表
7 |% L# W, t* |% ^#include<stdio.h>& g0 p, v2 P. _
#include<malloc.h>- R7 s5 ]2 f$ f+ `; \% @
#define M 8 //共有8只猴子
1 L: v+ O9 ~; r2 d n#define N 3 //数到3只时退出第三只
8 n% t6 S' G3 j4 }! z7 atypedef struct monkey; i: t- ]% @/ _/ M1 X
{int number;7 E0 M8 q5 |/ T+ _7 m8 P, ~
int flag;
1 X3 _4 e2 Z1 S8 {struct monkey* next;
3 ~8 U- C9 e# A) t8 b, B- i}MONKEY;
1 C- E, M( Z" w- D9 y! nmain(), H3 _4 V4 {) v. _3 }
{ MONKEY *head=NULL,*p,*s;
4 |, T, q2 d& O: V8 F+ u8 b. u int i,sum=0,count=0; Z! r/ O( K3 g7 |! _
clrscr(); //清屏
' u; H8 s _- R: I; c( T p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存; R! X2 @! l" e8 k' v7 {
p->number=1;p->flag=1;9 e* ?/ W: _* m# }! {
p->next=head;7 `) p8 A* d* w2 s5 c
head=p;7 F8 _. Y; r- `# X0 q5 c6 x
for(i=2;i<=M;i++)+ l1 p, q9 S9 n! f. l6 g% g
{ s=(MONKEY *)malloc(sizeof(MONKEY));
, X7 x! x( }& W: e1 j- b; `- I- |7 x s->number=i;s->flag=1;
. d ~2 s# T, u% X" F s->next=head;
8 Q$ m P+ C" F2 R/ Z p->next=s;p=p->next;
' ? m% h3 o+ ] }
! k+ ?9 {, T1 e p=head;
( {4 _4 ]* A+ j. {2 ?8 V) \9 t for(;;)
& d8 `/ z0 Z) x ]# k5 t) K, R {if(p->flag==1)
! H( k. e n, f( A. M$ i6 \ count++;' _9 Z5 l4 J m4 O: h' X
if(count==N) b( S4 W8 ^+ X6 C8 v
{p->flag=0;
6 k* P- {# b! M. J7 I* C count=0;
% u: L' H& @. B7 T sum++;}0 f" n( M1 _1 U& U8 `$ F
if(sum==M-1)
/ S4 Y6 C1 I' k- ] break;
' q5 q7 j" R' n2 O+ J, { p=p->next;! V$ `; S- B- b) Q) H
}0 W2 ]0 F! W. h/ j! p1 x
p=" n& S# b0 v) Y! Q; \5 M
head;
# y Y3 n& Q- p for(i=1;i<=M;i++)7 q% I* a# A) L- v& Z5 U4 x: d
{ if(p->flag==1)& `% @! p8 N2 @. l: L n, T1 U1 T
printf("\t%d",p->number); w3 s- r: {* V
p=p->next;# B L8 H1 Q! J8 m7 d9 c
}
) F) S6 x) n6 a0 v: N
8 }3 H" F7 I" n; M; ~. U) W! r( W" d2 Z5 r8 z; D% X
2 e" h+ k1 r8 E( F6 z7 x; A
} , F, j. m9 J9 H
第二种方法:数组; X8 Z3 ^. z+ B: Q# |" \
#include<stdio.h>
7 c, f, }% N3 V#define M 8
2 J/ k6 V" c" e9 xstruct monkey
8 h/ ~% Y# n$ a" L% F3 m% n7 A( j{int number;
* C# `: ~( \1 q* P# |! ?7 Vint nextp;
4 U6 i0 Y4 P5 U. ~- V' }" M}link[M+1];. L. C0 U7 a( G+ B
& j, ]. B4 g- _; {void main()
8 A" R: v) l; X6 {! U1 ~" O{int i,count,h;
. L3 ^: `% j4 e& L9 Xfor(i=1;i<=M;i++)4 R ~) O; @: D5 j z8 L
{ if(i==M)' q1 o1 Y& _6 W1 y$ {1 g; e( T
link[i].nextp=1;, d) [+ _6 ^3 x, ?7 c! W
else
0 `7 ~5 Q3 F4 D; g, _- `- k* i3 [ link[i].nextp=i+1;
& x p: x/ |0 I, r' w link[i].number=i;
0 Z) T# e+ e' K! Q. x}) M$ v/ P' \0 {' A
printf("\n");
2 W/ t& P; W/ y/ Q6 x/ q8 Zcount=0;% r5 u8 ~2 L- p3 t8 G# o+ S# v7 m
h=M;
0 K e' b6 \, }4 Cprintf("依次退出的猴子: \n");
6 I/ I# O+ l G0 D7 e# h% Nwhile(count<M-1)( G( u# \( c5 L0 L
{i=0;
: [' G+ Q6 s% o1 W$ p- Kwhile(i!=3)
* f* N$ Z" p- b{ h=link[h].nextp;8 p2 V S- Y- P
if(link[h].number)0 l( r/ T6 q! _2 l
i++;}
- U( X3 U% S" q! `) x
8 D7 V+ z* l( r9 \; Z+ s8 ~printf("%4d",link[h].number);# p# ]( L* u# v# S' C( A5 S' q4 m
link[h].number=0;% ] l% l* A, Q( P! s1 n- [& h
count++;
( n/ D$ i! C2 h7 `! L$ f, `/ P}
) T. |0 K) e7 ] B g& k- a( R1 }( `, W" n% W' {8 v% ?0 Z+ M
printf("\n大王是:");
; T: j0 u y/ i- b1 W) r for(i=1;i<=M;i++)" ]! B( m. C+ [! |3 f
if(link[i].number)6 B3 M7 i6 H2 i# Q' g+ X. ]/ B
printf("%3d\n",link[i].number);+ ?( Y$ p$ P+ C. S( x' S
! D: ? T- N$ \* Q$ w
( F5 Z: o; A4 o( l/ f, X6 M} H# e! K# o+ K( G
第三种是普通方法for循环# C/ |4 i% x% w, R: ^
#include<stdio.h>: s. ] K+ g4 p, q' Y( D
void main()
. A# a% _* h7 R{ int i,k,m,n,num[50],q,*p;6 j) Z, I* N, p7 J+ Q9 t% }
clrscr();
4 i1 [$ i' V0 r; O [ printf("input number of person: n=");
* k i- u/ a0 ]4 \& Q scanf("%d",&n);
: i) G& X2 g, @! e& T3 F# }! Dprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只2 m8 K2 v: Z* L
scanf("%d",&q);9 O, H1 [4 K2 a A( c9 D( m
p=num;
+ o. I& i2 h; D2 l. w1 x9 R5 t; K for(i=0;i<n;i++)4 P7 M5 b6 R3 ~/ ~ s6 s
*(p+i)=i+1;. U2 V7 Z( G. S' N Z; F; v
i=0;" q. x( K. z) t3 c1 k; a
k=0;% ^ v, V: d1 U; v8 K
m=0;8 s6 W6 J; C% i( v" t
while(m<n-1)
: l9 j4 p' o% V7 Q0 B {if(*(p+i)!=0) k++;
+ z' j( l. s+ V! @% \" l7 \ if(k==q)
% q9 W7 i, F9 o { *(p+i)=0;" i" d+ W$ K; {/ |7 u Q; M& U( B( w9 w
k=0;
( W3 H: y0 }& i% c# Y( | m++;
6 b0 a% z. X; T1 t5 e$ J# x8 { }
* V' y P3 W& s" Y! I* v( p# s i++;
% k( ~" I( Q+ A& ]. q- ]- ] if(i==n)i=0;' h T6 z, T, u9 J% n# R) Z
}
4 L7 h( O0 g5 e3 t% M) z& H while(*p==0)p++;
3 U( Q9 x/ B3 P* r6 ? printf("The last one is NO:%d\n",*p);$ i ]- g% {- n# m" G
getch();' n/ U* t/ N: p+ L
3 x% Q$ }, ^3 [' n% D, s
} |
|