|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!# Z; K+ w8 F8 w: S) ` c/ [8 {3 a
这几天我在忙着编一个问题,我用了一种方法编出来!" Z2 n3 `4 [0 n, `& \9 q
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!5 u8 S% n5 @, z. q6 j1 k5 n7 }
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 ; X/ S4 y6 s% \. n: i* F y, t
( W- P s" a* n4 z
: D2 s! E$ S9 s8 `9 Q; |. u 题目7 g* P+ d: v# _* l4 `' l- T4 H
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
) e/ ?1 ?2 x0 _" m% W4 o& x第一种方法:利用循环链表
2 j: t$ P0 u" _#include<stdio.h>
# p( Q8 H/ M0 [, s, s#include<malloc.h>. v5 ^% ~$ \' P' V
#define M 8 //共有8只猴子) a' n* Y, }3 C0 H
#define N 3 //数到3只时退出第三只% X9 l9 O& [1 w" L+ u3 S" ]
typedef struct monkey" i0 l0 _6 N& X& e
{int number;
' y/ m. ]6 @& {$ V4 ^- a9 ~: Aint flag;) T7 t* o, r# T, J3 L
struct monkey* next;' a+ l2 u i0 x& _) E* S
}MONKEY;
5 Z2 w b4 s7 f* ~( s7 J$ Zmain()6 Q: [1 j- [: u& V
{ MONKEY *head=NULL,*p,*s;: _% |. T6 c) t3 o. {: M+ b9 S
int i,sum=0,count=0;
6 a' o7 f2 t8 a clrscr(); //清屏' C l2 r( u$ N2 ~0 L3 A
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
" v$ T* L9 ?( e7 y, Y p->number=1;p->flag=1;
* {- X5 [! S* T4 O/ G4 f p->next=head;5 y) b) `5 `! K" L: k& h
head=p; h; G8 `4 v# ?( `
for(i=2;i<=M;i++)
' \6 |8 o" {7 Q0 F0 l4 s2 B { s=(MONKEY *)malloc(sizeof(MONKEY));
5 N' j( P5 l; K4 t9 C' ~) g5 I s->number=i;s->flag=1;6 F) i. A5 W6 z8 U/ w
s->next=head;2 Y& f3 R D/ P4 _2 [! x
p->next=s;p=p->next;, b2 Q$ T# s: g9 Q& R4 R8 B
}) k0 C* }8 m5 w
p=head;
: x, D/ |5 @- k" o0 P for(;;)& A! ^) B1 _% w6 W% E% D/ d
{if(p->flag==1)6 D5 J5 K p8 }
count++;8 E! b& S+ U* i
if(count==N)
6 ?2 }: b8 L0 R! E( I$ g {p->flag=0;/ P; `* G, f. p& b: X2 {2 B: q
count=0;' ]3 a2 i' Q$ a0 w' ]
sum++;}. F; m" v% x9 _/ U* A1 T J" C
if(sum==M-1)
1 n& K% F I* Z+ p$ l8 w: A break;, Z, l% g4 Y" I
p=p->next;/ X+ K( k' s g# q2 F2 _5 l9 {
}' T$ Q& z9 m' u# C
p=
0 i& ~" x% P2 `3 I: g% \2 J head;
6 b; }% K9 Z2 z2 u6 Y+ _ for(i=1;i<=M;i++)# }: J) I% R7 f, X# C; l" o- V
{ if(p->flag==1)
/ T" p, Q; v# [1 P7 {/ @+ K9 h9 O3 _( } printf("\t%d",p->number);7 }7 H2 o+ ^; s# ]. m
p=p->next;: @- |1 |! D- D+ X
}
0 a: Z/ u$ k- J( C- e, h G, I0 J# {$ i
. O: h3 h" B" ~; j. `
; z3 W9 U H3 Z
}
& s8 b& A4 r4 Y第二种方法:数组
7 [+ H9 p/ D1 U2 i' R, y#include<stdio.h>
$ i7 {. O" ?# y$ C, Q' f- c. W#define M 8+ s4 r5 ]$ m3 }& d: _7 J5 }
struct monkey
+ x1 C0 u, e1 l0 H: u{int number;
/ J6 q: I( \' {& M4 v; D1 O3 hint nextp;, H# H1 j+ H D% C( u! U
}link[M+1];
/ S; Q8 ~# x- N+ k2 O' n* t! b( H6 T/ {: A
void main()! R' p. |: O3 _) a$ z
{int i,count,h;# v3 e- T) l; a8 K6 U! d
for(i=1;i<=M;i++)
1 x9 x/ T$ z" j6 x7 }# {0 K. v8 @{ if(i==M)
/ v4 u, V4 T+ `7 h7 k link[i].nextp=1;
1 e$ v# A: p3 B8 E6 I7 m! J else
2 B3 }- ?" V ?7 ~, p2 Y1 Q1 I# x link[i].nextp=i+1;
I' Z1 }, @# v, |' M5 F link[i].number=i;% c6 R2 s( ^* {2 |8 c0 k" [
}
# i& y. U, U7 l' d* [5 Aprintf("\n");* G: w( o3 c: A3 z* v8 ?0 S
count=0;( F* @. v, [1 `' |5 f7 b
h=M;) W( Y5 R& T) R+ }
printf("依次退出的猴子: \n");+ S' T1 g/ p9 U0 M' l
while(count<M-1)1 A2 p$ I0 M. G* @. P
{i=0;/ N# f* T. D+ Z( v. g3 D7 ^- l
while(i!=3)
" w, j9 }' |5 o7 i3 C, n{ h=link[h].nextp;
. [: U, E, G* W+ N2 h7 t( S if(link[h].number)
u' p( H" i: j% Q i++;}
! M O' _% N5 U; g* ]
5 B' t* E; x" D, z' ]& iprintf("%4d",link[h].number);/ q& x1 A5 x9 n- _# R
link[h].number=0;
7 f% `4 B- s5 i: ?8 p0 lcount++;4 P5 E' z& K4 A; W( {
}! I0 S! L3 A ~0 f @( e8 f
m t$ t! C* \* \' G2 i: q$ Jprintf("\n大王是:");5 _* [9 i' Z; H- ?
for(i=1;i<=M;i++)2 d) C/ }! W4 j' x: _) f
if(link[i].number)9 h( P9 O, i* F5 Z: }
printf("%3d\n",link[i].number);
3 M& o, m* U$ k( [' }7 g* U! e+ a: P4 `! m. Z
+ u' ~! W8 o' o
} ' ?8 t& U, O5 k7 t. b6 n
第三种是普通方法for循环
& n4 x: @$ b+ V) a#include<stdio.h>& t. U# ^+ q4 W& P5 |! j
void main()
8 c1 U. ?$ w2 \ q{ int i,k,m,n,num[50],q,*p;8 @+ N4 N6 g& O9 J( H- p
clrscr();
' T; P8 X, Z7 N+ ? printf("input number of person: n=");$ I& p3 i7 A0 r4 y+ b1 t/ x
scanf("%d",&n);
7 i- u5 k) e6 {0 K& Nprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
7 O* a9 O3 r+ D( ~5 G. V5 O Y scanf("%d",&q);; O& d- d7 _0 Z" q1 f
p=num;
) u* C4 e6 c4 u for(i=0;i<n;i++), N' J/ U* ]% c" s |
*(p+i)=i+1;$ j- S U) m7 G; p6 q8 x* \, e' m
i=0;' y2 Q5 F/ r2 e4 g
k=0;
4 k9 d: ?6 ~% Q) Q, V m=0;
& u& u0 D) A- o8 q( q: L2 m while(m<n-1)0 L7 I0 W$ T2 R ~0 |2 S) j) h( _" G
{if(*(p+i)!=0) k++;9 S2 x* z1 X4 C7 @. S% m
if(k==q)
* p2 B" T, N# n; X3 f" ` { *(p+i)=0;8 [( g1 ~, j( b, O+ J: J
k=0; E1 x9 r0 g( y% g; h
m++;
8 X# {& A, x) B* o# L1 c2 X }
8 V8 O+ @( V2 f& l1 D" ] ~. C i++;4 _3 I6 G6 C5 F
if(i==n)i=0;
% q; x/ t- F% _" Q& s }- r) E3 g9 H: s' { ^$ }, M% g% Y
while(*p==0)p++;8 z5 {. [, \1 p
printf("The last one is NO:%d\n",*p);( e! Y/ I/ A3 {$ K x2 Q
getch();; n3 x. M9 I0 M w
: ]* l( v. k8 W3 h} |
|