|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
; f3 |& F0 a$ m) |, r% G( F' ^这几天我在忙着编一个问题,我用了一种方法编出来!
9 F1 q5 h5 C" b" N# [, ?) p+ |/ G$ J' T但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
* L: Q) C7 U! Y3 ` H; l3 m0 L注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 ) V& i1 h6 b1 [# B8 V
3 g& s2 E, m/ w) K! y' e: z* |/ Z' g0 z8 A R) K: y5 d
题目9 s8 c9 g5 H9 c* X, l
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
. R. z/ b& @1 S- h/ m9 K! K第一种方法:利用循环链表- N0 P1 V0 F u, X+ f
#include<stdio.h>
% [, I- M# M& u) S#include<malloc.h>
3 O$ o* U# J r0 u6 }& x#define M 8 //共有8只猴子, c5 h) X+ y- S& A% c9 q$ D) A
#define N 3 //数到3只时退出第三只$ v0 [+ e2 y" ]
typedef struct monkey
) z) Q2 X, U, _% l- q+ a7 w8 Z5 z{int number;' X4 H* [3 l4 ^- z) G
int flag;7 y1 b3 D3 [5 }8 c
struct monkey* next;
0 O; R7 ?. r5 P: g}MONKEY;
; e2 l0 p2 \) ]5 c; f1 ^main()
5 l' y8 a- {& z( v{ MONKEY *head=NULL,*p,*s;
" I- N& a) V+ }! e' t+ F* k int i,sum=0,count=0;$ }1 ]/ t7 X1 r
clrscr(); //清屏! r( R$ k; e+ Z4 z
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存0 O& f3 n) `" r) d3 U5 R* g! A/ p
p->number=1;p->flag=1;
4 T! e7 o4 j0 h% l& G# s p->next=head;
' }8 y6 W, l7 ^9 B% _) T head=p;
' z7 v( t' y) U' C# O1 N for(i=2;i<=M;i++)
' y2 I8 S( E/ {- n* { { s=(MONKEY *)malloc(sizeof(MONKEY));: o2 F Q( `5 A: p7 g# u$ v3 @; j
s->number=i;s->flag=1;4 ]: ~ l) {' h6 `
s->next=head;/ _ F8 t& ?) O& `4 ~0 r: Y
p->next=s;p=p->next;
! C, { H' W1 v% W+ W } B& {2 Q( t' x+ f
p=head;
/ \4 i6 K7 q' O4 b6 Y" { for(;;)
: W2 h' }6 `. c0 h {if(p->flag==1)
# [2 }( n# B& j- h0 A% x count++;
$ y1 c8 O% l! h5 ^3 X7 s' D if(count==N)
) J/ S$ T' f8 Y" _3 a! b( i {p->flag=0;
. {" K5 B c, q3 W) H7 n count=0;
% j0 T U* z, [ sum++;}4 r* y1 B+ P0 d% D
if(sum==M-1), s Q. a7 W# @# T& }
break;! ?. ~6 r) N! A# y
p=p->next;7 Q9 f! s4 \" J
}# O0 z y6 x* i2 u7 d$ g+ ?7 t
p=
) [9 n! L! S( ?; X. F9 y head;
# k1 r- o5 Z6 R7 L6 O6 ? for(i=1;i<=M;i++)
+ A1 a9 j( {% ~ { if(p->flag==1)
! Z+ o5 A& `4 G, e' ] printf("\t%d",p->number);6 K* ~6 { G! h! D* `* C4 K
p=p->next;
/ l: L+ q3 j% q+ b }
( t. H# F- L* U/ V/ H% u7 t: B j+ K. {! H* ], t+ y
4 p# C; f0 Y9 x1 w( Z5 a) o8 `' o7 W. b) G! F: T
} + L" Z9 N: m$ D
第二种方法:数组4 D* q' |1 F# m; C, d. c( F" a$ H
#include<stdio.h>
/ z0 z% H0 L6 E1 R3 m r#define M 8& U5 x' u6 w2 R5 O" r" j
struct monkey/ c- M6 J* v7 S C! ]
{int number;
' S$ B( ?8 v& z% x& k0 o& lint nextp;$ a4 K3 V8 M, {4 i' r" F) z/ L
}link[M+1];
! W- X/ y, V. G8 y3 a: [
+ {1 j- L' z; D* p0 k r% wvoid main()3 W+ H# X+ Z$ u
{int i,count,h;
0 v F0 S! y+ q1 E: b, q% zfor(i=1;i<=M;i++)
5 j5 R: _( N4 b) h4 \{ if(i==M)
( A5 E3 m/ ?4 S+ [6 F/ e) ]$ u link[i].nextp=1;
3 W' k, t/ E: T5 n# r else
/ y& e2 ~* e3 D6 n link[i].nextp=i+1;3 J8 \+ X( \& \1 e
link[i].number=i;. y; V% x+ m3 t1 f9 E
}- G% _' J1 X7 Q/ c" u# f- p
printf("\n");
# T& K6 ]3 c) }0 z4 j& s2 k$ ]count=0;
. H1 T4 c$ u/ m/ ~2 i, b/ Qh=M;; ^" J( T. }7 y* v; f( C* @
printf("依次退出的猴子: \n");
" c1 `% F! J. m" P0 ^* D1 i' rwhile(count<M-1)& O4 [) b7 I2 F# K! w8 Y- h' l- ]) a
{i=0;( r/ y3 h& Z( A" n
while(i!=3)
% ~; A& m+ t* y# n{ h=link[h].nextp; R) ?8 T l2 X& r& `+ T
if(link[h].number). }8 \; G* j. E1 r
i++;}5 p3 G! E. q) Y' X( V: I/ z2 b2 Y
6 T# g3 Z. `3 k" y* d( g7 {3 K
printf("%4d",link[h].number);3 S" \ Z3 a* ?# _, r8 _
link[h].number=0;
- I2 f. p% h" d7 ~: p8 gcount++;
/ V, s# [+ A4 R}
, m' {( y2 L5 t! n9 D2 a
6 l4 d. S% V; b; \% Bprintf("\n大王是:");$ f5 @4 B" e. O& _, h2 Y; Y3 P
for(i=1;i<=M;i++)' I( N/ `7 Q& P0 ^* _# q
if(link[i].number)* `' @: E0 {4 M1 ?2 c) u* L
printf("%3d\n",link[i].number);% ~3 ~ \% u: K$ o9 L
1 ~" L3 E* u$ F2 T5 s! N. {$ O5 w! t% V$ R( e1 T/ @5 Y
} ( z3 C7 L3 f% d
第三种是普通方法for循环
0 ?9 B: M8 r4 U9 h# b; D H: u#include<stdio.h>
5 P- B, w3 m; zvoid main()
$ V$ G2 L d% y6 W/ a{ int i,k,m,n,num[50],q,*p;
) c5 I$ F$ {; N clrscr();
2 W- u" C$ F9 Z& j; i" C printf("input number of person: n=");+ C* ?- v8 f- [ [# m/ g$ O
scanf("%d",&n);
* D5 B5 q- D0 [. j" Z% qprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只: H0 Y! `2 ~& f% u
scanf("%d",&q);& |/ _0 u! b: e2 Y! h `
p=num;
. X+ A4 m' \9 z+ @* m+ ]8 N+ t for(i=0;i<n;i++)+ u( Y4 K9 K0 c1 m# f$ H; X
*(p+i)=i+1;' p: T* j( _! {4 U1 U, U3 s
i=0;
3 w: O9 ^- k2 W( g3 w k=0;
* V, j& N& ^! j1 c0 L; q m=0;
7 }# }9 q* _$ L/ g7 z# v4 q while(m<n-1)0 ?3 q2 N+ @& ~* ^+ J
{if(*(p+i)!=0) k++;3 }$ p, \$ u) w) w- ]! |6 L
if(k==q)+ J; a1 B K& P4 a2 x
{ *(p+i)=0;$ L' y; F1 E) X; E# I
k=0;5 K( k; Y" s/ G2 y8 T5 F3 x
m++;
5 K& Q! i7 R! F6 e5 M }) k% }% G4 e f6 A2 m
i++;
* X E3 F: J6 v" U' g if(i==n)i=0;! B* c: w; f8 ?- \. H
}
8 A1 P2 Z* l* Z1 T2 ] O3 c$ d- B while(*p==0)p++;
x' V1 J) `; d0 d# [) p printf("The last one is NO:%d\n",*p);
7 Y$ U, [" ]: Z8 N; i5 u getch();
" Z; C! _9 {4 f1 @7 p4 X7 H4 X+ Q: S0 f$ p! \ I
} |
|