|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好! N# V% F k& I$ F+ U
这几天我在忙着编一个问题,我用了一种方法编出来!
5 O/ ^4 ^' u6 A) s6 K3 f% a但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!+ @; l) y0 J1 M V% w1 w: \- U
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 5 q1 Q( G+ U" M
" p2 Y6 Y9 f5 M0 ^% u
: r( l: z5 n5 c8 q0 c. f
题目 u# t2 \, a/ m
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
% K1 t* g, g: E" I9 {8 e+ ~第一种方法:利用循环链表. @/ n9 s# Q2 \1 F3 B5 `* A
#include<stdio.h>, X& z, b% Y J# i+ D
#include<malloc.h>
& Q+ d! y& |1 d6 ]( Q2 b9 O! b#define M 8 //共有8只猴子
1 r5 F$ j; |) d( i' Z#define N 3 //数到3只时退出第三只# j: l; D4 P- B1 r1 i5 N7 t
typedef struct monkey7 h; c1 n8 |2 W# N: h! U4 U3 d
{int number;
, o" w) y" s1 O6 e- l7 Lint flag;, t" r! j- O: P9 S; J9 y% b' C
struct monkey* next;
4 _; N3 o. I& M& U) A* u% t9 B' K6 ^}MONKEY;
5 q; i6 {& i1 p/ y3 l. nmain()
6 Z' S6 a, T" X: W1 n& U{ MONKEY *head=NULL,*p,*s;
5 ?/ E# R, y% \0 R7 N6 D& ] int i,sum=0,count=0;) J+ ] P4 f; X+ D2 c9 c
clrscr(); //清屏6 j, c3 S) O+ w1 x; P; I
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
. B! p! x7 n3 v3 o p->number=1;p->flag=1;
/ E9 X; X# q- z% ~ p->next=head;" @/ U, r) q2 d3 Q0 s, h5 K
head=p;
, S3 z3 X! e' b9 S for(i=2;i<=M;i++)1 h; O) h- O$ ^+ p$ A8 {3 n
{ s=(MONKEY *)malloc(sizeof(MONKEY));
. O. Q/ ]9 p F+ e s->number=i;s->flag=1;
8 t: M9 j( s) v1 J6 ]3 X( c7 O) B9 m s->next=head;
6 R, W2 N& O% F3 a) Y1 i p->next=s;p=p->next;9 T& Y. f6 K: R& q! Z
}
) @6 ]; |' p8 w) S" A p=head;7 Q4 D$ l& N( J: i! X
for(;;)
# h! E9 }: S9 Q! h4 ^8 C% u) G {if(p->flag==1)2 F, q: E) p3 T: |
count++;
# x$ L0 }3 [' |8 I. w: ^* T( h if(count==N)7 W+ k% y5 t! B( R
{p->flag=0;
- G; M! e; p# O3 G count=0;# A, d- {( f# l$ C# [
sum++;}
! Q" s T0 [/ S: D, I5 n: U1 m if(sum==M-1)
" S* W5 ^1 F' e: B& V9 O* a break;) L* `2 Z9 \" T3 @. {7 n
p=p->next;2 _* n4 Z# ^. H
}, E9 G* m# S W: }5 q
p=
9 Q5 w4 t" B) ]: ], A, Q head;: t/ j( B2 m, E0 E
for(i=1;i<=M;i++)
$ t) E' w# S8 r) V+ r9 h/ c5 S0 E { if(p->flag==1)
. K$ x2 l5 \# T5 [ printf("\t%d",p->number);
2 `1 l; _8 U5 g/ @" d5 z1 j p=p->next;
5 u1 n+ [6 h" B; H6 W% v5 X3 t; l0 o }) p3 Y: L- J* x
, m2 Q/ E0 D: v' |/ [% I6 n# {: e; [+ h( C6 x
0 e6 B0 a& K/ o# B+ }}
9 h& Y: ~9 G7 m' o第二种方法:数组# F0 [7 d9 s6 a
#include<stdio.h>
: V+ e; h7 ~+ ~3 q ~#define M 8
2 F% m8 ?" L, `2 J! |& f9 ^0 ^& Wstruct monkey" D; C5 |+ E1 V8 S/ [% t8 m* z
{int number;+ S0 y8 _1 @- Z3 n- p) N
int nextp;0 r- G r/ f' t2 l4 v+ r b& E
}link[M+1];! Z& g! W9 u: H' R) ~$ L& d
7 M- \1 y' s4 M' m# u" D1 ~
void main()
3 @9 f: v5 R, K{int i,count,h;
" ~4 T7 R7 e8 b* Ifor(i=1;i<=M;i++)
) s1 ?* r% o% t! \8 u8 x+ w{ if(i==M)8 F1 f: P* n2 ]7 c% V* v
link[i].nextp=1;4 P! b' y ` U0 d
else
+ j$ \, S' y+ r. f" D0 I) j link[i].nextp=i+1;( X2 A, f. s; C! `5 v! H
link[i].number=i;$ _4 g4 g6 N& B7 l p; h" w4 P
}
* \# o8 }! E2 `3 E, Rprintf("\n");
/ D9 G3 W8 S8 P, e1 U6 Ycount=0;
4 H8 ~) d# y6 [$ |+ Kh=M;
2 h3 R' }! p0 aprintf("依次退出的猴子: \n");4 W" e4 [2 C. ~" V0 L% u
while(count<M-1)
6 g" ?: t( d+ _) \" v$ p{i=0;5 z7 _9 @" q3 {9 x, l: `, J
while(i!=3)- j, g l3 _; E5 U; i- j( z* E" B* U
{ h=link[h].nextp;2 h$ f* s" \+ C% _6 V9 H/ H7 q% ]( G
if(link[h].number)
1 P U1 R7 h/ S i++;}
0 v' C3 v$ i' s( s0 R9 |2 ]% K: L$ U
7 j Z' S/ e7 ^* e' |1 [printf("%4d",link[h].number);
( o I+ ?1 l1 E6 Mlink[h].number=0;
3 w e% j: _! `' m6 X- Rcount++;4 @% s3 U& a! f( T# o1 ]: p
}4 q9 j |& B: V0 j; z6 h
. j! l5 P* D( I, w9 C
printf("\n大王是:");+ d- l# S2 ~0 X
for(i=1;i<=M;i++)( d: Z# M$ l/ B. Z. H4 |# X
if(link[i].number)9 y3 k" g! Z; H" r0 V5 t
printf("%3d\n",link[i].number);3 W8 C8 ^9 l- d' _& {' f' E
. [. [6 N' k; u6 E
: s% j' I8 g/ x} 3 w; N; t" P; {4 V1 Q& b/ D
第三种是普通方法for循环6 J2 Z! b! \* o; e8 C% g. P' h
#include<stdio.h>* A, X* B+ Z# u- ^
void main()
{5 B; [5 U# v2 t# i0 U{ int i,k,m,n,num[50],q,*p;: y& Z9 U P% M' L0 j+ t: _; N
clrscr(); n2 y* x; V F9 ?/ x
printf("input number of person: n=");; l9 L$ |1 N- M, i
scanf("%d",&n);
! p0 t. N- V- d3 r+ `( d3 o! Gprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只' G4 D; [/ G) P4 t3 f
scanf("%d",&q);
( v9 P, s- P( O, @2 w p=num;; V2 `8 H& p: ^" v5 w; V
for(i=0;i<n;i++)
E: o0 k; r' ^ _( M& Z9 x *(p+i)=i+1;
5 b- o& o" R: P& O$ o$ A7 s" d i=0;* Q. ^+ g, z, v6 X8 M
k=0; j- @, Y% ` x
m=0;" K+ ?, l. t9 _0 A6 W- K! w
while(m<n-1)
, @" {; S8 }) @5 U) u& V {if(*(p+i)!=0) k++;
! o8 {" y3 V% g7 G# F7 Q if(k==q)" M/ @; u! u6 c- K3 z& n+ O
{ *(p+i)=0;
0 ]; T' Y6 S; _) k4 w& I' B1 P% C/ H3 A k=0;
$ B2 i- {- d$ f" v9 L m++;
7 j# s3 r2 [% B" h# J }
- ~& m( X& J" S- q i++;
! d% i5 e' I1 i) j' z if(i==n)i=0;
0 M1 Y3 S8 s. `: B$ G5 W( V* [ }, B6 P; v( o1 u. [3 T1 k
while(*p==0)p++;
7 g0 U# Q) w4 ?- H7 X printf("The last one is NO:%d\n",*p);, H4 k6 E* T, e+ y
getch();
+ D/ a& @# i* R9 q* t. u7 i1 ~$ V) }5 ?* f0 F+ Z
} |
|