|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
( P6 a* d- l, Q" X3 m d这几天我在忙着编一个问题,我用了一种方法编出来!7 J: E5 O" @, p8 {: {! x
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
. N5 B( B$ N2 u5 C5 j, U注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
. |/ z8 v/ I. S. Y
8 ?* N& |* t# @" H
, z4 X7 i# H6 _' U1 R4 {; o. o 题目. z P9 p3 W/ ^& x* J
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。9 Y1 R9 v; B! a a2 T
第一种方法:利用循环链表
. B! M( C& I+ U: Z#include<stdio.h>3 {3 B" h5 \& R4 n
#include<malloc.h>8 E9 D. R+ \+ Z+ y
#define M 8 //共有8只猴子
6 Q9 v T8 i/ h6 @8 J#define N 3 //数到3只时退出第三只
: \/ r5 X. i( q) Z& B# s% Xtypedef struct monkey
- x8 l5 A* Q' A; `; g! b{int number;
5 p0 B1 P1 \) K- }) W# Yint flag;
; E* s& a- E& ]7 Q* V Nstruct monkey* next;- j7 X& I0 j$ b% L
}MONKEY;
6 ~7 T- V$ C" A3 x5 U# g9 B$ \: Dmain()
, R: j, x8 y9 T- d{ MONKEY *head=NULL,*p,*s;! A- |& U- u- H2 w2 e" O
int i,sum=0,count=0;* r9 b' P/ w, G; @' T- v! W
clrscr(); //清屏
. s! O& J2 X5 C3 S5 I o p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存& f* d9 y& C0 b" y) \2 E/ C
p->number=1;p->flag=1;
- z+ C% m1 W1 c% S p->next=head;
4 S5 E" b9 g2 ^5 d! I0 U head=p;: ~( O+ X" _3 F
for(i=2;i<=M;i++)
* J6 {( g+ D9 T" K; J { s=(MONKEY *)malloc(sizeof(MONKEY));
; c# E% i& n) Z, O s->number=i;s->flag=1;
6 `5 b! t, S! C' x D+ A s->next=head;' k0 |- m( s* k9 B6 ?( w. f
p->next=s;p=p->next;
6 Q/ J" Z' a( S4 U! [ }: x% |+ I! F ~) s. t. P( r
p=head;" ^) |& t% ?! h5 P1 x! b+ y. `
for(;;)/ a9 q- R0 S# l" f8 p. q, L
{if(p->flag==1). C% A) B5 u" k: i% _
count++;$ H9 a9 C9 f$ S$ k0 {2 G5 n
if(count==N). u6 j* s' U! R) D
{p->flag=0;
% f$ b4 A0 q7 o+ B count=0;! U! v. K/ `# X# o
sum++;}
% u: h& b# l9 ~2 y$ i if(sum==M-1)
s& i: X" I; i- i, H( g break;' n4 C& x% x9 ?- B" N" W; P; p
p=p->next;' A" ^$ X% [. ]4 r, e
}& F, Q; m9 Q/ @6 ]' q
p=
4 e& p4 _8 V, J9 o; J# c; u head;' k" G# |( T4 ]4 @
for(i=1;i<=M;i++)3 a5 I* l/ j2 C$ i
{ if(p->flag==1)
# T6 f. ?& ~3 n. Q9 V printf("\t%d",p->number);( D$ O. m, Y2 k& z& n
p=p->next;
# j8 D6 X5 l8 G& \! n: O+ N }
: e6 ?6 d5 r7 j7 k
, T$ ^! W! _6 m9 E3 H) B* `1 L" e4 W
8 c$ Q+ a0 ~) q; V/ B3 b) M8 h, S! t! ^7 K4 B
}
* |+ W) Y# J! D0 w9 r第二种方法:数组
K1 J" E7 w' z: a* W. s+ R#include<stdio.h>
. ^8 s- T ]. I, g2 Q/ w#define M 8
2 P! e. H! i, a9 l3 R& I/ xstruct monkey
l# X$ P) F7 x; b; K* y( q* Z{int number;
7 m( j* L1 g& j# X7 l, ~int nextp;/ M, j8 R: X+ s/ ~
}link[M+1];, O0 D+ a) e7 b6 i$ u3 H8 _6 ~6 s4 N
) g/ B! o; d9 ?# D# |, `
void main()
! b+ T" ^4 F. f5 M8 p0 P" S{int i,count,h;
+ f+ _3 a! R8 ifor(i=1;i<=M;i++)
2 b1 d. x6 k4 _6 g& \0 B{ if(i==M)" g9 ]6 R6 n! n. H- U
link[i].nextp=1;
4 y |2 ^ E2 h else. [3 s+ g5 y7 c9 t6 |. X
link[i].nextp=i+1;
: }3 M; i" Q9 Z! T2 U( o. q link[i].number=i;2 W: U) E4 B; ~
}
2 Q4 r+ j& q% U. a( Z9 ~9 s2 \printf("\n");
- |% R2 k) t! r3 `/ @count=0;
6 D! r4 l& O0 M0 h% N1 q r4 Z7 Mh=M;4 [2 ?, I* v4 P E. _
printf("依次退出的猴子: \n");2 I, a: d# a6 _& N* K* T1 D" i
while(count<M-1)
8 h$ @3 A( O7 V# ]{i=0;# ^& E7 q2 `: y4 D6 u& i* t0 ~
while(i!=3)5 W3 m$ Y6 a' h1 r7 B% j% M9 O6 K8 Q
{ h=link[h].nextp;
: P# f8 ]7 L" K1 j1 r" c$ u if(link[h].number)3 M$ W& K+ ?# z, F- R8 K" K
i++;}7 {- x2 t! i, }1 H) ]- f0 m& t) ^3 H/ b
' T5 a& C l+ b a
printf("%4d",link[h].number);
5 h1 j: j1 ]" n9 n! b0 c1 Q6 Llink[h].number=0;, S' r3 L. d% E
count++;
% p% F" Z- g- G}, B! u7 U3 s7 J' I
, M( Y0 H1 G G2 L4 Jprintf("\n大王是:");, c& X, y0 Z$ U' u5 g
for(i=1;i<=M;i++)6 L4 E! Y* f5 l3 t8 V$ z
if(link[i].number) I7 L9 P/ ]* A+ x6 Z! r& J( g( F
printf("%3d\n",link[i].number);
3 J8 D6 ?- ^- v5 q7 i a. J
, H0 q; L& ^5 [/ ~* u9 E( s0 v5 z; h0 w9 V0 a4 P( e/ J
}
2 V1 _8 Q+ b: l I第三种是普通方法for循环
+ @) T. B4 P2 }$ {5 @#include<stdio.h>
9 ~) J/ j) {+ D! p% y! Yvoid main()
8 s8 u9 [2 v/ T) P{ int i,k,m,n,num[50],q,*p;9 Z/ s' ~% ~' f
clrscr();- n' W4 o3 l: y5 `0 c
printf("input number of person: n=");
! K/ }) v8 J* ?& G0 Y scanf("%d",&n);
- t1 h1 f% a- v" _9 a7 kprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只. I3 d2 o: s9 ?. x
scanf("%d",&q);% G; e3 E( }: n& C, B: |
p=num;
/ U' T H$ h/ E4 N3 u for(i=0;i<n;i++)9 ^7 y" _. s% I+ b; Z" q$ E7 |# y! ]
*(p+i)=i+1;
2 D% L4 N. y" [6 E1 w i=0;
! @, V0 w+ `4 D6 E/ r! @8 y k=0;6 \. ?6 P- O! Z! f0 J- q+ f# u( |0 E
m=0;
) v. v- T7 p% K, d9 |2 l3 E' e- q while(m<n-1)
5 X3 }* ?5 [" }0 M& s* v" h7 h {if(*(p+i)!=0) k++;. t8 H, I' q5 [; @
if(k==q); t2 u9 J) g A3 m. E
{ *(p+i)=0;/ a! ?/ u: p, F4 P9 G
k=0;
6 g, s. q' A( b m++;
3 H" @. D0 m7 Y0 I( H% r9 E }
( a$ L% r& M6 ?# Y% l5 y3 S i++;" N) Q8 z }; o. @( F1 E1 H2 W
if(i==n)i=0;) E: T2 h! P# J y6 ]
}
* N3 `( k) L9 e0 C while(*p==0)p++; c, r9 i, N2 \' F8 y; B
printf("The last one is NO:%d\n",*p);
7 [" I8 y; C! z, [ getch();
* p8 U% v+ j0 i3 D! J; P, Y7 k
7 K- {3 v9 \( K/ _& F4 \8 z: C} |
|