|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!% R: G5 }9 d7 Z4 v+ P( n/ t
这几天我在忙着编一个问题,我用了一种方法编出来!
: V3 n9 w/ }; b2 T+ i但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!3 H! t0 k/ ?' P
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 ) E, {% P. t1 \+ C
1 ]) J3 W1 E5 m9 I* L Z) S9 w0 I1 h7 K
题目: N9 i9 P% U: a/ L
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
' w3 ~; l+ N" j1 Y' s2 Y第一种方法:利用循环链表9 G4 X+ J8 F. y
#include<stdio.h>
& K+ {9 W" r: |#include<malloc.h>
8 Z8 ]5 h5 d3 H4 ^$ E4 F#define M 8 //共有8只猴子# o; q& U0 z$ Q4 i# m1 P. ^- ?
#define N 3 //数到3只时退出第三只
- u3 r( {1 S4 t8 y* N" V: Z8 w, jtypedef struct monkey/ l- s, e# q% s$ @$ g, V1 L7 k6 z
{int number;
1 @# T% J7 q1 C6 ^3 K; rint flag;6 ?2 C, P/ W+ g3 Q8 U/ I% E
struct monkey* next;) x2 A# p, O- g5 o5 D
}MONKEY;
& v4 D9 E5 u/ R5 K% ` u7 Xmain()
8 q- N; u5 g7 p3 o/ E- s z, X{ MONKEY *head=NULL,*p,*s;% P; X# V; q3 o: C
int i,sum=0,count=0;! N* x ?: U; E0 v! ^
clrscr(); //清屏* W( H9 Q0 U- _6 e/ S
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
3 m8 u2 ~6 _- {& r* h p->number=1;p->flag=1;1 ~. V6 q% ?' W& E6 A% x4 A
p->next=head;/ ]# c! G l- p& k' c0 e
head=p;
% O" ~2 m. S! P6 ~0 F for(i=2;i<=M;i++)
2 W b7 Y- |8 E { s=(MONKEY *)malloc(sizeof(MONKEY));; d; j9 f: @) o$ @7 o
s->number=i;s->flag=1;4 P- r+ r6 f$ ? h4 Y& d
s->next=head;
. W6 f' @0 y8 v" ^' K( I) m p->next=s;p=p->next;; N9 s# w8 |. F% a4 D: L( i
}
+ c i; q& `( U" D8 w p=head;8 _; x |7 t* w2 X( ^3 ]7 f
for(;;)0 G& C! @! [9 @0 G% }. V- X
{if(p->flag==1)
7 @; l1 V& o) z5 A6 [# u, _! L count++;
; `( g1 L9 q% r. U* A0 l8 l( F4 k if(count==N)
. h0 ?2 a$ x3 d& v/ j. p' N' ?0 ` {p->flag=0;
/ w |7 L9 \" ?- T" D count=0;
" p0 o9 Y6 ?! [" N$ Q6 Z& T sum++;}8 j+ i8 x% A7 R
if(sum==M-1)9 Z( V4 d8 o* N8 \- {2 l# F6 w
break;% k4 J6 c% K) L7 _
p=p->next;
: g! h% g" I) ? }8 y% D9 G' F8 Q" }2 m R$ N8 [
p=
, N7 a+ w3 F& b9 y8 V* ^ head;
& Q9 P5 P8 i9 S for(i=1;i<=M;i++)3 H+ A' s4 @9 c5 f* c
{ if(p->flag==1)
$ [1 ^; i# X% _7 U' Z( Y+ \2 a printf("\t%d",p->number);
# n7 M h0 q# P' Z. Q( f2 T p=p->next;/ ?+ r- c# z8 N- W4 I) H& }% |/ |
}
; x8 i9 O- _' N6 h) ]' q$ @5 O4 m9 x+ g" K
. I8 L' p0 h% a0 I
* U$ R" z- E* p( b}
7 N: ?/ p' U5 o: A第二种方法:数组
+ B* p0 a9 ^2 E+ `+ X- e#include<stdio.h>3 F8 N3 ?. Y' g& [! T
#define M 8 U; P2 O" [0 M8 s u8 Z5 o/ N
struct monkey
" P: @/ R! R8 o( ~& @ h, R{int number;$ m1 l& O9 @3 K W: F+ M+ o
int nextp;
6 G. t( j! O& V6 L8 s. Y}link[M+1];
6 y( {6 e1 @( l. M5 Y" e# c8 z% S3 u$ I; |: e3 F6 B
void main()! G& S* Q) g5 ?+ \4 k6 v0 t/ `& R
{int i,count,h;
% d7 Y2 b; L% w3 V" Q5 ofor(i=1;i<=M;i++)
, B0 h% s" c8 s0 s$ u) W6 J% _* _{ if(i==M)5 ~( P0 Z6 v1 i) J/ ^, T
link[i].nextp=1;
+ y1 E2 ^. w9 m" ` else' |( f2 ?5 e# O3 O, h& W
link[i].nextp=i+1;% R: i7 V7 j, ?& Z8 r$ d
link[i].number=i;
( t6 q) ^2 k. w% ~+ X ^5 H}
8 `+ G/ p: Q) |5 yprintf("\n");
- e0 v8 j6 y T8 X$ h+ zcount=0;
/ d0 s( S. X9 l# Jh=M; t: n8 a ^# r) k6 ?6 R; c
printf("依次退出的猴子: \n");
/ J, i" h7 J4 O1 h# zwhile(count<M-1)$ |5 Q8 d9 A y8 ]% ^
{i=0;
. M" d# H, F) P- mwhile(i!=3)
; b0 q0 y( z8 B8 k{ h=link[h].nextp;
" ?1 I$ y0 s4 l4 g* Y if(link[h].number)
, b' g8 f. f! r/ k( x i++;}
; @! L6 j' u. ^( Z9 _7 r5 r% l6 f- }3 K, M
printf("%4d",link[h].number);
- C x/ n7 _; c$ x4 \) slink[h].number=0;% z' l) ~& v8 O
count++;8 ?1 M# w0 ?6 Q# W
}6 ?$ S* ~) D6 o8 t8 G ]
% H9 R3 g9 C- ?& `5 k a
printf("\n大王是:");
3 p8 G/ }# q) Q; J1 K for(i=1;i<=M;i++)- E" {' p; J3 s- {$ H+ B
if(link[i].number)
# n- o* w4 V C, D printf("%3d\n",link[i].number);3 f) u# b8 J3 L/ Y% ^
! n' w/ m. {" ?; ^' ]3 j) F% B" ^
} ! O$ D' g% f4 a, D
第三种是普通方法for循环' n( Z' M J/ ~2 i+ ?1 j
#include<stdio.h>7 S* A u: {7 e% d9 i
void main()
% P ~% o8 X5 {+ _4 o0 y{ int i,k,m,n,num[50],q,*p;
0 M( ]- h+ E. _- k$ e clrscr();
/ X/ ] w; l# D+ [5 I printf("input number of person: n=");4 N( q$ y$ g1 }4 y! I9 p
scanf("%d",&n);
- q: o" H' P' \ ]$ j: Mprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
7 G( @" x/ l, m3 T) ~/ v scanf("%d",&q); ^3 H, g) ?6 N' h m0 M" d$ x: ?
p=num;' x# A& u3 `1 |% a
for(i=0;i<n;i++)# ^1 `" y9 `+ d7 w E7 y/ x
*(p+i)=i+1;
# {3 q; J8 F0 @9 c" v i=0;
- ~1 d3 r/ a: J: U k=0;
$ t8 g- T; V; t M m=0;
5 }6 Y2 X" K; c' C4 _- q# Y while(m<n-1)
; l! K4 p7 i& e, _4 ?. G {if(*(p+i)!=0) k++;! L9 B2 ^! U" H" k4 a" Z7 o
if(k==q)
$ X: a8 C% ?3 [+ Q { *(p+i)=0;2 k! }1 p) }; T6 d T! I
k=0;" B( h- w2 U3 q& e
m++;' W) U' c; ~0 K' S( n
}& L! Z# z% c1 W7 j c, |" X5 \; }
i++;
2 |7 r$ j8 p" { if(i==n)i=0;
' z/ S2 u. K4 C; S1 z+ {/ K }
' H9 ]2 H5 U2 B- j while(*p==0)p++;
8 H0 A6 t) o$ V3 G1 u( u printf("The last one is NO:%d\n",*p);
) E: g) i2 a3 y getch();! X# Q9 z0 H4 y" i
/ o- G5 h V8 ?- N
} |
|