|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!- ]" z% k- `% b+ N
这几天我在忙着编一个问题,我用了一种方法编出来!6 I7 e% W8 {' H' s) d H1 ^) y
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
! y: v% ]; `9 A- _) j注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 + k s. p1 m9 n w
- n, R+ o7 z) d$ L
1 n9 E* `1 ~9 }+ j% W4 [: U 题目) U. |- t; {& ?2 ^7 T' c# ^" @' I
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
7 s0 T: b; F6 N- K% M8 A第一种方法:利用循环链表
/ K7 b6 t7 x0 ]" p' N& D. n7 T#include<stdio.h>+ Y, `4 B/ l( M3 }, u- b
#include<malloc.h>7 r' L; R9 {% n3 k8 M8 H5 Y
#define M 8 //共有8只猴子. {( t. `6 Z" A' j* y8 F9 m
#define N 3 //数到3只时退出第三只 _' n0 n2 e2 ]
typedef struct monkey
2 D1 O O" R. R* ^0 Q- e- }9 A{int number;+ T& p$ Y9 c' l: U- z7 V1 R
int flag;$ z, ?: ?0 W) m2 ]) o5 m( {) c, b
struct monkey* next;( i4 t7 w" K9 E! P- b) E& Y
}MONKEY;
4 J* Z9 x( V- J8 ~main()
+ @3 J \1 l: _2 a7 p' t! L{ MONKEY *head=NULL,*p,*s;( |3 J* j: O" \' g* s2 g/ w
int i,sum=0,count=0;$ z& p) p. @& g5 o$ j
clrscr(); //清屏" }8 r6 Q( _+ b' G
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存9 a& l2 B) Q6 f# {3 M
p->number=1;p->flag=1;
; n. ?' }% A% L) @/ D: } p->next=head;
" f5 B) m5 g- C7 [( A- C1 w1 } head=p;: N/ g( H5 F- F# U) C z& B
for(i=2;i<=M;i++)
! m+ r9 b. u+ B0 a7 ^/ { { s=(MONKEY *)malloc(sizeof(MONKEY));
* \! z0 i7 F) V% \+ V+ G1 w s->number=i;s->flag=1;/ h( o9 k" |8 f
s->next=head;- ^; d" @9 |6 [
p->next=s;p=p->next;
2 ~3 r- t% u5 @! J }
" J& A5 U2 b0 i5 { p=head;7 W, q: X& v. S- ?
for(;;)
/ M$ k3 e$ H3 @; a! O E* Z8 L {if(p->flag==1)
; i- X! T! v: ?5 y! b! ^0 k3 O8 C# q count++;- F6 Q E+ o# o" c. b
if(count==N)
( A/ |$ w; t. V3 R) P6 w) J {p->flag=0;/ S( B% u9 m" [; F* L: ~
count=0;
* j1 @0 @+ Y' c5 A0 f/ ^2 w sum++;}. J0 I* N3 r5 _4 X& B1 w" p
if(sum==M-1)" l/ l' p5 z+ h8 T+ l' B7 J
break;& V2 e& w: ^4 s0 d, w( E
p=p->next;
6 b% r8 A) \7 N/ ^( Q* p }+ F. M! ^: V$ `" n1 o; y
p=
0 B5 r; `% I, {" l. W1 j9 T% k* G head;8 \0 }; r$ T( | M, @4 P
for(i=1;i<=M;i++)- J( j8 G" b# Z7 H8 ?
{ if(p->flag==1)4 b% ~& \$ W# m
printf("\t%d",p->number);& Z" E) Q) J2 l4 b9 @
p=p->next;
5 v! w0 W# c! N+ j, D }
5 e2 J0 C0 }5 @" @ C2 g& l+ V; M, a) w: R+ a
" w( |6 d1 u' ?; ]5 j8 {, G" C! D. L }6 O- T
}
& t1 M! c& Q4 G( b: Y第二种方法:数组
* ~- X$ W- x# }7 Q+ l8 c#include<stdio.h>
% ^8 @; V$ {& V) g. T: E#define M 8
- c6 \# N6 ]8 r& R$ H# @% Y. E4 Dstruct monkey, |- ?! c& u# f, K
{int number;& H4 u) \* `' s& _
int nextp;" t5 [" }/ f: x Q5 C: C ^
}link[M+1];
5 ?9 H( A: [$ Z0 p9 j: d7 ^0 {
& g; A, i7 W+ Z, Svoid main() c* u! B2 q" p2 n0 M8 X
{int i,count,h;, S- i' }* ^ i" I) S. X
for(i=1;i<=M;i++)$ p9 D) x( F/ H: g
{ if(i==M)
9 M& {0 R" n3 j! H1 ?0 a% \ link[i].nextp=1;: [9 n$ p7 i& I. _# C
else0 G" Q+ T. z. b. C) r
link[i].nextp=i+1;
; ]- V5 H- t8 I4 F% } link[i].number=i; k* V1 o6 P& c3 F' Q' a
}3 ~# l5 S( L7 o* c+ ^- }
printf("\n");: G. |# F0 A, g) V1 G" N& G' N
count=0;
0 ~. @' t/ a3 Ih=M;
1 j E) F1 s# H/ a7 M7 m2 Dprintf("依次退出的猴子: \n");5 s& R2 x% b% p
while(count<M-1)
% Z+ X* b% i; `3 Y{i=0;
& H$ W* c! c6 I/ d( H; _while(i!=3)
, s v1 K9 V, e) ?5 P3 E3 ~{ h=link[h].nextp;# U, A; |) U K+ I1 E: C; ^
if(link[h].number)
# ^; p* J; _, E i++;}" q) P( `: {3 v% Y
* }6 P! O4 Z- f) z) `6 ?: rprintf("%4d",link[h].number);/ u }9 k; C% M
link[h].number=0;5 q( O* z7 ?+ r2 K/ G" J3 h+ Z& F& s
count++;
' k7 A- r+ L0 S$ f$ e! O9 U5 n- ]& H}$ L& Z' U: k f* f# R+ }# d
& u' Q# H, O2 q
printf("\n大王是:");+ `5 @6 v% D6 @6 b/ h2 {$ B9 W
for(i=1;i<=M;i++)2 ?) }) l( O% g
if(link[i].number)
% C1 G2 o( m% S4 B# Y printf("%3d\n",link[i].number);) {2 X& g9 i# F0 ]+ I
; P2 R* `* Y3 B$ k; ?
$ M) J3 f9 k8 p
} ; r/ \% J# h( a, h' U" m
第三种是普通方法for循环5 R" B* [6 a0 Y3 p( d/ f; y6 d
#include<stdio.h>
: u7 W* B1 o0 m" b% tvoid main()# c) z+ z" z5 C
{ int i,k,m,n,num[50],q,*p;* u9 g( o5 x' O. E+ Z, q
clrscr();
5 ~1 \. \! w3 |! L4 y3 I- H printf("input number of person: n=");
. c& `1 E5 i. z7 P" G) d4 X scanf("%d",&n);
! E3 @, V9 n) l! b* _6 }printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
3 M8 e4 Q2 [5 `4 N scanf("%d",&q);
- z- b) i. Y) e7 z- H8 b p=num;% p* L. ~. A: }: l* l/ k+ B* W
for(i=0;i<n;i++)
2 f+ m. d. v1 f ^7 m *(p+i)=i+1;# D6 i' `2 T$ W2 `; N" S
i=0;3 o$ f* {2 o9 _7 r0 N% t3 J
k=0;
1 _+ q$ i( _0 e$ h, D3 ]- ` m=0;% o0 ^* D# J* I) A
while(m<n-1)5 s0 m* g: M% k) S2 P
{if(*(p+i)!=0) k++;
, B7 X E# D3 ]1 F4 [5 j if(k==q)
0 H. \6 ?2 g( V( n/ R4 l { *(p+i)=0;5 {% Y) E& W: K9 [1 S9 i7 E' n
k=0;0 r ^9 f& D7 s! s0 f; k; d# O
m++;
: g7 t# F' s% _: H( c' G8 M }
% G x+ O/ v1 |4 o i++;# G& U$ { e. B9 a8 S
if(i==n)i=0;) M# M: c: S( ~" p
}
. v6 R6 [, N Z. R7 `/ U ] while(*p==0)p++;
8 \5 s5 {5 ^2 M4 V7 f% p! C& _ printf("The last one is NO:%d\n",*p);
. C" [/ z5 I2 H! B3 W- x getch();
5 H. d/ r8 E! N% v9 f! |# ~
( w g3 k6 w4 Y} |
|