|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
3 y i2 v; p. }# p% S/ R* @这几天我在忙着编一个问题,我用了一种方法编出来!0 w0 u3 T) `$ Q. `, ^0 w
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
' \' C; i- A3 j5 @# q注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
" |7 ?' f3 r& N- ^ @, {) A& j, T. u/ W7 [
* E( u- B2 A3 d: q4 u; R* H/ n 题目
' j6 r2 U4 i0 V" I+ a4 _9 a( {山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
! K2 ~$ X z8 l% M. N: k. p8 e第一种方法:利用循环链表7 s6 l' |; l0 Q
#include<stdio.h>$ _* |4 |9 O. C8 t" J( n/ Z
#include<malloc.h>: @" A3 ?$ V) Q2 C( I% `
#define M 8 //共有8只猴子
, ^: V' g6 J- G3 \2 R! v' D#define N 3 //数到3只时退出第三只
7 B( B5 R( Z& v/ O* atypedef struct monkey
5 b& I# Q7 G8 _9 Z) N& g- p2 I- o{int number;# J2 D7 u9 u5 e+ w3 l* N
int flag; y2 ?# T7 i0 T/ B+ r; w
struct monkey* next;
. `5 r+ T$ U3 W. C8 G}MONKEY;
x4 I W9 k% S7 `, X5 ^- dmain()5 I0 V# z m3 e: C
{ MONKEY *head=NULL,*p,*s;
; U* ` ^2 t% N+ \7 @0 _9 k* \) ~5 i int i,sum=0,count=0;+ m, a3 `! H) r; K% n- _( [
clrscr(); //清屏6 `4 c7 Y/ e; v! M( q( u
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存1 }& Z# Q" V- s9 u4 X. r
p->number=1;p->flag=1;9 a6 U5 Q: v) E7 e6 y1 [
p->next=head;
1 O8 W0 g2 D9 v8 p# B; b( p. n2 x" I head=p;
* ~" p2 l4 S. `5 K for(i=2;i<=M;i++)0 d- T( P0 b: L# k! ~6 g$ k% H
{ s=(MONKEY *)malloc(sizeof(MONKEY));
+ O' j5 @. g9 | s->number=i;s->flag=1;
" G* }7 j/ B" R) b s->next=head;
; ~' U8 Q2 H0 T5 R p->next=s;p=p->next;2 G6 x$ `- g0 R" f" {% Y
}( ~, v! O2 r& `% b6 A
p=head;6 X8 ~# F. w }. K
for(;;)
* v1 `$ k9 z u {if(p->flag==1)
E$ P* s* c/ y1 V3 \ @ count++;, @% j' R2 C. V0 B
if(count==N)3 K3 m; Q' l: i7 q
{p->flag=0;
. }% L4 h1 t9 J0 `# T+ A8 a9 E count=0;
0 W$ F- l# @" m! W+ l sum++;}
4 k+ k, w& Y# A" Q# g* C if(sum==M-1)
( Z/ X: Z' @! Z# q8 _ break;3 c5 n7 L; [0 h6 k0 i
p=p->next;0 e. s# ^1 K% g
}
( _- }1 \+ A- B7 K p= U" ?2 h. s ^' q ?& `$ L, j* h
head;
# A' S }" ` p3 D9 s' C for(i=1;i<=M;i++)
/ {, p& ~& c( g4 r- S. ` { if(p->flag==1)
! j2 k* i4 |3 W( T. ~ printf("\t%d",p->number);
+ A6 y, I4 r' f j p=p->next;
$ B' ~* i( O1 c4 p7 F3 @ }
9 Q/ O. m7 t1 ]* I+ {8 S2 B2 R8 S% ^. Z: i% ^# V7 o
$ G% O/ \ S6 |1 D- U
( y, z3 Y( S) X- x) `3 m} , S/ U2 w7 S2 r& z7 d
第二种方法:数组; p/ }% q3 j( h, ^8 v8 m4 F6 K
#include<stdio.h>
9 m/ O5 H" t' Q; @; ]7 a$ W#define M 85 s/ M* z; f0 ]* p1 p$ o1 P* B$ q* a
struct monkey4 ]0 C0 N* M: D8 E* j
{int number;
% l1 K. a) o- k. X" \5 M* Uint nextp;2 ~% M! v7 r3 E5 h& d% H
}link[M+1];$ l" q+ |2 T8 t. I- s
. Z/ y7 b1 k) O1 y9 ^( z- E* G
void main()( l+ x" R3 a2 l& Y
{int i,count,h;' \$ ~2 Z9 E3 m9 T/ G
for(i=1;i<=M;i++)
8 I: G, u. x8 P+ N{ if(i==M)
7 ] ]; V2 y2 z% y, j& y4 m link[i].nextp=1;$ B# s i/ q( `- Z' A2 _9 X7 h
else; c( r5 S' I6 b9 Z
link[i].nextp=i+1;
% x6 b" u8 \$ Z; \$ U0 V4 } link[i].number=i;: L5 l" X$ ^0 K# X2 P7 z
}% `" n$ M& K! x( ]# H1 @) L
printf("\n");
3 b$ B' b, T& c$ bcount=0;1 M6 {* M/ P, y' w5 d& m ~
h=M;
- d P2 ~5 W4 b3 K4 k0 F& uprintf("依次退出的猴子: \n");
; o6 g9 Z+ @; f0 N( z* swhile(count<M-1)2 H) N2 g( M. O6 U* m4 A
{i=0;
2 x% L! S9 F7 ?5 @& g- |/ Dwhile(i!=3)
# V0 c+ |; V+ M{ h=link[h].nextp;6 s) ^+ k0 X! a0 p0 j* P
if(link[h].number)
2 g% O& S% `) r& Y i++;}( j' ]% |6 P/ k6 |0 j+ \
, u; L) U( y6 `2 D" O! eprintf("%4d",link[h].number);1 Q7 F) H) @( p$ }
link[h].number=0;
! `4 F: Q+ z$ y. X* C* |: Q# L8 Kcount++;
2 O+ C6 `* Y. F6 r. t3 ` ] i}
7 ]/ X* p& o9 v
, H; q3 \9 T4 Z" Q0 Wprintf("\n大王是:");
" w! v, s6 c! I: H$ b( l for(i=1;i<=M;i++)
! A2 J5 d f! L& |; E& I' p% k if(link[i].number)
% d* `3 D! k7 [ printf("%3d\n",link[i].number);
! _+ t `0 d) L
2 H7 }: |; F5 y! P
" t" F/ C n* l" P X0 G/ b} d: @+ y# s6 w
第三种是普通方法for循环+ \$ b* X3 Q7 E: M M
#include<stdio.h>
& w6 O( j; ?" l1 }void main()
# j! I# T% W( l* `$ e{ int i,k,m,n,num[50],q,*p;3 {' }& |- @5 ?# d8 U
clrscr();
- G( v2 \ I$ Q z printf("input number of person: n=");
( ?0 y2 x& o: y3 i8 i" t9 d1 c scanf("%d",&n);
( x; B4 y8 J# ~' f' \0 F2 t; jprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
. t6 H% p/ m3 E. L& W+ Q scanf("%d",&q);6 B, e* h9 X4 g% |# r/ ~
p=num;
\# x1 F+ n* [% ^. b) A- x for(i=0;i<n;i++)+ L- i( o. r2 o2 J% v& b% O
*(p+i)=i+1;+ I9 m5 @0 n7 {9 H2 D
i=0;; d5 V4 m7 g: m# A' j
k=0;
' d- Z+ J; z' p) ] m=0;$ E2 |6 ~2 t0 m! m3 K
while(m<n-1)
, G0 a5 C- c8 J3 a8 `+ g3 { {if(*(p+i)!=0) k++;# J9 W* P1 t* z6 n) \( b
if(k==q): B" w6 z+ C3 f' i& d' A3 i
{ *(p+i)=0;: w. s" R' j6 d" @" a9 b6 x& F& W
k=0;
3 i8 O0 y3 j8 [1 X m++;
! [2 d% }- V3 M" n/ x& h" y }& P1 O$ e4 |+ K; q
i++;& s3 U0 }2 |4 K7 ]5 e
if(i==n)i=0;
/ T3 q/ y# f% ~/ E( V& U7 b0 } }3 e) O- o3 ~& r
while(*p==0)p++;, W6 A. X; F% h
printf("The last one is NO:%d\n",*p);
. k" m, D8 I6 C. n# X getch();
( W% ]+ `* k! k
! a0 O/ i( U# X) l% I$ y9 h} |
|