|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!& E$ b5 |+ T& Y/ a, Z% }- G! F+ \0 J1 m
这几天我在忙着编一个问题,我用了一种方法编出来!
, _- }9 P, o0 y$ `" x& B但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!- o% K+ Y" G3 y6 _1 ]) x: E- ^7 Q
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 \, E- @! T# i- M4 `' N& x
C# R) \* }$ j1 N+ k7 S
2 m8 h1 f9 \) X6 K 题目* P* Z! S- O: V
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
4 a% o0 Y6 Y# l5 K$ [$ g第一种方法:利用循环链表7 q- N5 B8 o$ V& H
#include<stdio.h>
9 M6 a0 S1 V' [" \#include<malloc.h>; [6 p. t9 T( k3 M3 ]1 F
#define M 8 //共有8只猴子
2 V" P0 {- x) n: e- I5 S4 t#define N 3 //数到3只时退出第三只3 K% B0 a! |( g8 \2 R! v
typedef struct monkey7 m' e7 F+ ?2 U1 S9 ^+ X' D
{int number;7 q3 f& o+ l0 o: r. P7 {
int flag;
4 r3 H2 T2 \9 b8 w/ Z/ g$ K9 Hstruct monkey* next;/ s+ }5 c2 R# L/ L8 X1 V
}MONKEY;5 ]4 t" J0 e- a8 H6 R5 Q3 ] S
main(), c* {8 z) ]' P( ]; X* ~2 ]5 q& M+ M
{ MONKEY *head=NULL,*p,*s;8 r% C+ M, \8 p$ D
int i,sum=0,count=0;7 g& F: [& S: M7 ?
clrscr(); //清屏! |5 x5 }+ {$ l! ]$ X( K5 r/ U1 ?
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
, X+ w8 y- R r- o' Q# y# u p->number=1;p->flag=1;
7 {* U: l' |* E0 D* ?- t p->next=head;
7 I& C. O! c! F/ T7 t head=p;
, w/ H) e/ C8 v$ c0 ]& R; n! | for(i=2;i<=M;i++)! ]' Q0 J& h+ x; v. N! }) l+ _
{ s=(MONKEY *)malloc(sizeof(MONKEY));0 C( o/ h- `8 f( v& H! C
s->number=i;s->flag=1;6 S& Q8 Y! ~: D& E3 e1 b) W2 T: a0 i
s->next=head;
7 s9 \$ q8 H( j6 n. r7 a p->next=s;p=p->next;
/ x6 E5 C3 @# {% E3 H/ ^' s }. h" a* F6 @; D8 k4 l! x
p=head;' w$ J) [( {* B$ _1 D: W- U
for(;;)
$ J2 p& W3 A- l" V2 m {if(p->flag==1)) }, O2 N$ ]) @4 u' k3 j1 F
count++;
2 Z5 A* g3 ^0 O) I, j if(count==N)' ~& \2 a6 f+ \
{p->flag=0;- x4 [0 E" }: G
count=0;1 l% _5 Z0 s- S5 X0 t# ?5 l
sum++;}
. \( p: X7 v! W0 a! Y if(sum==M-1)' ^2 e; K, l4 L. n9 P
break;
" s6 d8 i) I6 B. K p=p->next;
' U3 L# k: c3 {3 {+ V3 G4 d9 R0 v }+ b1 l. Q0 j, a( { b' c
p=, c* v, p; r, f f1 X$ Z- g
head;; l4 w' R2 t: v$ J
for(i=1;i<=M;i++)
' d4 y) v& u8 z/ @* S' N: c6 R0 F { if(p->flag==1)
5 L1 Z$ G% x6 T3 R6 J3 m5 K printf("\t%d",p->number);
0 B2 Z; C! T. a p=p->next;4 R, n. O, P a& ^# ?9 N1 x% k
}
. I2 j, e2 R' O: ]. b; t& Z9 W, q% |7 Q& j' V3 r% Z( t, D
( E5 c4 [( C, R2 L1 [% ~9 g& |" S
1 o9 L n/ t# g* C/ ~! o5 E$ P
}
: R, o7 e2 ^: g! K4 _5 ~! d8 o第二种方法:数组
3 t' x) k4 c$ S* I% P+ v& }9 l#include<stdio.h>7 c2 D) Y0 z7 R7 `
#define M 82 {8 O0 n3 i$ @5 }8 {
struct monkey0 ^8 B) U6 s# p+ z9 X
{int number;7 E( n$ D% B) j
int nextp;2 ?; a/ \# F- x6 r9 L/ A J- _' u7 g
}link[M+1];$ m' O. Z8 T8 ^- S, r
2 S( ^! ~. Q! Y% ?1 ~0 C
void main()
$ N4 y: R3 T! E! p7 r4 m5 P. s{int i,count,h;
; d0 j- m7 L1 a4 cfor(i=1;i<=M;i++)& Y' u5 b5 U7 q5 L
{ if(i==M)
: A/ z7 `+ G2 [& t. U% a5 V link[i].nextp=1;1 p8 b q8 J9 L7 ~+ l
else
. I1 D1 O! S! @- g link[i].nextp=i+1;- O9 [: q1 e* V4 N5 {
link[i].number=i;
3 c* D$ q: ~& U8 U" y+ I1 l8 |* c}
7 u3 S. _: X7 H# q8 S( n1 nprintf("\n");6 O6 `! `* O' x( S1 ^% z
count=0;- X; Z" m5 S; X5 u* L
h=M;
4 y ]; R' R5 a- Eprintf("依次退出的猴子: \n");
+ K0 W) r {2 E6 t/ {5 V; xwhile(count<M-1)
v: h* g( W" m$ G2 Y d: _{i=0;' @. E! {1 U* g+ F+ H' G. J
while(i!=3)
. u, |1 G) ]; {4 L9 h# t, \+ v% c{ h=link[h].nextp;$ ]. b" J' x; O: G4 T( |6 p$ ~8 g
if(link[h].number)
X* f* W* l' X! e4 g i++;}
+ P* o/ P" G1 d" u1 p
& z; J/ b. P, ~" `printf("%4d",link[h].number);
' C! p+ ] h' j8 ^+ [3 `5 V! ~link[h].number=0;, g9 t! R0 N5 z+ R. B$ Y- e
count++;0 |* r; Q/ p' a7 g# p
}
9 |7 F1 f7 j" i3 u
- Z. u8 x C1 W8 F+ jprintf("\n大王是:");
: d Z( l( g, M- u for(i=1;i<=M;i++)4 p. V, `7 D( R0 z0 }' m
if(link[i].number)+ d- J2 K, [4 ~- l% K6 g
printf("%3d\n",link[i].number);
8 o! \. k( G0 Q1 s2 b* [& a% N {" J
7 W5 p" B7 o8 t}
! V U; B$ I1 n1 Y9 B) U( J* M第三种是普通方法for循环
0 @4 K" u) d. P# M#include<stdio.h>
# b7 b5 f4 U) g8 g: f E: e9 B6 Yvoid main()
" Q ?0 ?( d, a1 `1 f{ int i,k,m,n,num[50],q,*p;$ ~, A L. o; ^+ ^" s; @1 `) A8 F
clrscr();
3 i& ]7 @1 a% G' W$ l8 x( J5 k6 g. ] printf("input number of person: n=");
0 |/ G$ S6 O, n* d scanf("%d",&n);
0 L0 i- {* F/ Z: K9 N) T6 M _printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
- d% }# i; a7 k A, A) V scanf("%d",&q);. O8 _7 E' U& n) L& l2 _5 u0 y$ u3 K
p=num;: I/ M% F+ A9 J- N
for(i=0;i<n;i++)
# I1 c2 \0 B. S- ?7 g- [ *(p+i)=i+1;( a' d. s( b3 g
i=0;& Y7 G- J5 C$ G% ^
k=0;
5 E0 f" D' B8 W1 m9 z0 ? u- ^ m=0;
1 w# c) [. S2 l! F! ^ while(m<n-1)
3 m1 j3 A2 q( N d- l7 s {if(*(p+i)!=0) k++;! b( P! X* }8 M& R( J- _
if(k==q)
# `) ?3 d! t0 X! n" p { *(p+i)=0;" f& q5 k' {! O4 [% A4 x" L
k=0;
, l* F, @5 b# e6 C+ ?, M7 j m++;) r k2 K* ^, W- Y; e
}
: O# B; n3 T7 T- F1 z8 M. C i++;
; ~9 U* E. E8 T) H: Q' h if(i==n)i=0;7 R4 w( M" F# k* ?8 w
}
1 ~) r1 j, _# _% ~) z* o, l. Q# }! u while(*p==0)p++;
) y" U/ W' n6 Q/ {8 S: T6 } printf("The last one is NO:%d\n",*p);: @ ~9 V/ Q% `; {
getch();5 T9 w) p3 |* L/ e/ K) g/ {
, w$ J) x; i0 d) W$ b
} |
|