|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
$ Y0 r/ G7 r, c o这几天我在忙着编一个问题,我用了一种方法编出来!
4 v* `8 a5 s3 c2 e! d K但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!% V' U2 i/ V1 _5 H1 w8 c2 o
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
2 O ?; n+ A& K( j7 Z- C5 ^/ M$ c0 |9 X6 x1 v, _' ?
1 e/ a/ \7 U5 J. e3 _ 题目* A8 _( f; i0 N5 ]4 N0 r h7 d
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。9 c; o2 @ _& P1 W$ I$ Q4 p0 Q
第一种方法:利用循环链表
2 c0 o+ n n" _$ Y% K% @& P#include<stdio.h>
0 |3 p$ N" G9 ?1 F6 C) j$ n, V" X% I#include<malloc.h>
* r9 F8 E3 ~0 \8 u6 \6 O#define M 8 //共有8只猴子
/ I, _4 S! A: j" @, k- o" `. Y o#define N 3 //数到3只时退出第三只
2 {% d' n% ]1 Ttypedef struct monkey& v% @3 F1 w7 C" u- |% Z6 A2 t
{int number;
( n6 W6 n9 L. e# U1 H8 i t$ oint flag;
- y( r T2 r; L, `: istruct monkey* next;, f) j% b, `' w0 b& z, F
}MONKEY;3 ~7 {; {& P/ S8 e# k
main()( ?, `: X/ N8 S j
{ MONKEY *head=NULL,*p,*s;9 B6 Y$ d3 Q/ y
int i,sum=0,count=0;
7 d3 ?- Q" E5 ? clrscr(); //清屏" ? N" `% w- `1 n6 X5 U; E
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
. @" L$ l2 k1 S3 n" }2 `/ q p->number=1;p->flag=1;
7 ]/ Z" S- c8 ^0 L: M5 t p->next=head;
! k+ N0 y. h# `# C head=p;# Z! K1 M! S% _/ d; l/ y+ @) x( c- h
for(i=2;i<=M;i++)0 a- R( S9 N5 e$ j% Q) s/ \
{ s=(MONKEY *)malloc(sizeof(MONKEY));1 ]4 v( e6 W& b4 Y% e$ T5 y7 U# U
s->number=i;s->flag=1;5 G5 L3 P. Y9 ^/ i
s->next=head;; L$ W3 c. @& i
p->next=s;p=p->next;. e: C. S: X" k2 D2 o/ w/ X
}5 H6 l: g# X' l& e
p=head;1 \ ]5 U- Q, i6 \; x- B s
for(;;)
5 s, Z, v. B1 B* e {if(p->flag==1)' i4 S; Y: G, p+ H) b
count++;' O. ]9 D ^- W( E' L5 Q
if(count==N)
1 n: x; K) E7 x8 w8 b6 G G; m) Z) Q {p->flag=0;
4 V$ i! {- N0 t& W O- m* d count=0;# A: a* F/ |7 W4 e
sum++;}
3 G, K; b8 @2 ?: k. K; R if(sum==M-1)3 P4 U, V8 d5 G/ V' B
break;
# g! c3 A, j" K1 X p=p->next;
1 J! `; c5 A" y6 ~. o% K4 k0 W }8 p' U) W" x+ |( V, W+ A
p=7 t# ~5 M5 y4 z4 @: K1 Q
head;
& |+ J6 x7 M: k for(i=1;i<=M;i++)& d: y l3 l. \- H1 A
{ if(p->flag==1)) {" k0 o6 ^/ L
printf("\t%d",p->number);
# t- @3 c) m5 u4 m% q1 o p=p->next;
8 H6 ]7 ~7 M( s# k }
: C3 ]$ x# `3 H4 a; }/ @% N9 i
6 e: E; N4 t S9 p: K$ b& Y5 o, Y& A# {: I) E) d7 T1 n1 L
+ X" {; F5 @2 V- k8 g}
3 E3 A4 \/ l7 k$ {3 t+ r0 E- a第二种方法:数组0 M: ] l8 q( G T
#include<stdio.h>" ?% @) I, e3 X7 F
#define M 80 M: F4 e0 I$ A
struct monkey. S% R2 ~( X" H) o
{int number;
! r& e; J- A. R! N3 K1 d8 Kint nextp;
* P9 M1 i3 {: E: N5 m}link[M+1];! K1 \5 Z, Q4 o
- a3 G5 K. Y+ r" l: G" w4 ^: y
void main()
( z% Z* |' O( n8 I& S{int i,count,h;6 m" d7 r: Q- T& E, y* \ P' T
for(i=1;i<=M;i++)! z5 O6 S, u! l
{ if(i==M)+ R' f' j" c' A4 K& p' Q
link[i].nextp=1;8 n* L; C# H) `8 i1 E7 n7 W& }
else, w f5 m+ u) K! ?. n( S
link[i].nextp=i+1;
( \! y5 ~& ?- f' Z link[i].number=i;0 |( k% {4 f* G) A. c
}6 s e5 K; V( z$ C$ c# s
printf("\n");1 D( _+ x* v% B
count=0;
( J1 U- R% q9 f9 }0 th=M;% b* z0 T# a; r% D7 ]( T. z( r) G
printf("依次退出的猴子: \n");2 S; L. G& H6 Z' o3 f
while(count<M-1), n6 l8 c B. o
{i=0;
7 b" J1 c3 Z# O; o1 O4 B+ _% Q# Z$ c! fwhile(i!=3)& f% q% a) d- i! D" |! p4 _
{ h=link[h].nextp;! N! ~1 O5 L3 K) c0 ?
if(link[h].number), g W6 G9 S; i @. C& r( g
i++;}1 l$ q5 A$ B* J: {$ {. M/ T2 z
$ ?( ^( a. l/ F1 yprintf("%4d",link[h].number);
* G! s3 O8 u) }7 tlink[h].number=0;
; X. g) e- F, y2 K+ icount++;
: \ C# U3 H. n0 v0 I}- V2 Q3 L8 v" b4 W' J/ R
5 o2 z' T! i& D$ O q
printf("\n大王是:");6 r* u% E/ n/ F! u; X! |
for(i=1;i<=M;i++)
) F6 E; c+ c4 |; O9 t if(link[i].number)
6 l- Q- ?# U2 e6 n printf("%3d\n",link[i].number);
6 \1 Y% o: s. S9 Q( \& N* M Q4 b
; k. B9 r0 @3 x1 K u
: p7 x# J$ C, { ^) m8 O} 1 h. `- J5 @, D" E3 h+ Z H
第三种是普通方法for循环* }8 O. ]% e$ s4 q; x7 |
#include<stdio.h>+ v; H( P8 g; a/ O3 W
void main()4 k! h0 i8 N+ d( x h/ E8 W
{ int i,k,m,n,num[50],q,*p;
( ]4 G, @5 \) _- W clrscr();
( o4 K3 U$ U$ l" ^1 ~; Y4 t printf("input number of person: n=");
2 {3 ?& n* V/ l( ~: F+ Q* b/ B% u scanf("%d",&n);" q) R: j, G' @
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只. Q, h+ o9 \) h# Y( l/ m8 v- s
scanf("%d",&q);
' g% Q; \2 b/ U" q3 `2 |5 \" T p=num;1 X' u. T N1 Z! k1 M
for(i=0;i<n;i++)
2 b0 f. `8 u8 W3 {: Y) A *(p+i)=i+1;
9 k- n3 o3 t* p9 [- H5 ^' p& P- ? i=0;
+ |# r7 C6 K: ?; T$ z; v k=0;
7 c' L9 r9 ^6 e: \ m=0;+ t& J+ W# T) ~- A
while(m<n-1)
% |2 b1 |% z8 Y' i7 Z6 V7 t {if(*(p+i)!=0) k++;
7 C! M# t' O$ C if(k==q)- ?) ^/ U" M' \( Q/ j3 b. K$ H* _
{ *(p+i)=0;
' C% ?* m! [$ n1 b q k=0;4 S1 ]7 l) W9 }' e
m++;2 x$ p; I( K" g; C( T( t
}3 u& @+ P' T5 S: B, C
i++;6 E$ A6 ^4 d/ @. o! x; Q
if(i==n)i=0;, s1 f G$ K7 T
}) H3 O6 \, m n' I
while(*p==0)p++;* ?! x5 C1 A+ |
printf("The last one is NO:%d\n",*p);% o3 e ^& ^/ A5 F% \
getch();
' R) v: \5 W" [3 L5 c1 ]( v# n9 y- U1 D( T
} |
|