|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!. L9 u- K" B" q' F* A
这几天我在忙着编一个问题,我用了一种方法编出来!9 i1 M8 c, N; `8 p$ W0 {( K' e0 \
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!8 Z. q1 `: y2 o
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
( G1 E" y6 `! \6 h/ ^9 H; B, }
3 {. |+ b: b. y5 q* Z2 A
题目
' z4 n0 L) Y9 s山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
- k; m7 }) ~' }; D; R: G, z# s第一种方法:利用循环链表6 Q% M: t( a7 D; j0 f
#include<stdio.h>
" f+ {- G- {; ^- E$ N! f. R# ~# |#include<malloc.h>) x. A4 U, E* ~: }6 q# p2 \1 E, {
#define M 8 //共有8只猴子" k7 M' e1 c) L. Q$ r& _
#define N 3 //数到3只时退出第三只3 ?) ^ R) m; t( _( C
typedef struct monkey
8 x+ H) ~' S @{int number;
6 Z$ w2 \- D* i& Q' nint flag;
4 `" H# P5 t, M' J- Wstruct monkey* next;
9 W4 D. u( _; ?) d# j}MONKEY;2 ]" Q/ c- J, |( a5 O
main()
! s0 Y9 T# w0 ]/ y{ MONKEY *head=NULL,*p,*s;: Y4 T+ i: B8 W5 l6 g
int i,sum=0,count=0;
+ l' y( U4 j* _8 o8 k; X, W* _" j T clrscr(); //清屏
; _; i6 s4 w: r% v3 S; v" d p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
- e/ S9 v- f5 m, E p->number=1;p->flag=1;
+ L6 V* M2 i X0 z p->next=head;1 v: j6 F/ v ~4 K- Z3 G
head=p;
* { z& g! g$ ?. f8 K% B" a for(i=2;i<=M;i++)
: | J; _+ i6 W2 k0 |6 Q5 r { s=(MONKEY *)malloc(sizeof(MONKEY));
( c6 ]2 R L+ ?+ n4 E( E s->number=i;s->flag=1;6 n; x1 k- F6 f0 g+ h
s->next=head;0 M' n5 y: F# h# o
p->next=s;p=p->next;( a4 O7 R& U+ y' Q3 U% K
}
0 ?& `9 }% B9 v p=head;9 ]; r9 C1 |6 @9 J2 S7 T
for(;;)* M+ ?2 h9 G' Q+ _1 ^3 k7 ]% e3 l
{if(p->flag==1)
( ~4 {% P6 r1 w, x count++;2 \7 O6 c5 _& a6 V; g/ `2 r
if(count==N)* j1 F8 W. `8 x" G
{p->flag=0;
5 S" w6 ]/ `* [7 ?4 f, s- a: u count=0;9 q( t5 F; }4 M7 I& e
sum++;}
$ d# c% [ z4 _* i& i if(sum==M-1)
- ^$ V, P2 B ^4 @. e# }5 S/ c break;& S8 V1 x9 T0 Y% c
p=p->next;
) D' m9 P$ t7 W- R; o4 b/ k$ L }4 O$ O9 l9 J9 ` O' K4 w4 Z
p=9 k" v, s" C& J: u
head;- ~" U+ T5 L4 @* G
for(i=1;i<=M;i++)
: X8 W' Q7 n/ l5 u, j, C- P { if(p->flag==1)
) I. ]3 l6 I! v3 k9 ` printf("\t%d",p->number);# j- @+ ^% t' ~5 T4 T( ]0 J3 M
p=p->next;
9 U: b; \: Y @" o9 R4 P! X) N }" j( x4 T9 y- e7 }8 Y
y: k8 ^% d2 P8 s/ V/ B2 y4 e9 E y* y' d
) X# I8 W/ h4 n9 Z
} % K% d/ C/ T7 e. m( q5 }6 }( [: b
第二种方法:数组
$ i7 i. s% F$ w* u#include<stdio.h>! ~, x6 L. I. _! F o/ R
#define M 8- a( T$ ?" r+ I( u3 t4 L" M
struct monkey
. U4 E; n. r# r+ U, e: p' o" k{int number;" b- Q( {/ {# ~( f$ b( A
int nextp; F3 M& _) C5 K, I% \/ k6 }! O2 x2 k
}link[M+1];' U; E" d& s0 V3 b$ [+ M
: P. ^' a; V1 X0 E/ j! T O
void main()
- f! w1 x8 U9 c. p+ S{int i,count,h;0 o! c8 s# Y+ |. O
for(i=1;i<=M;i++)
( D4 V; h: ]6 Q) e{ if(i==M)
1 ]! ^ h. G h4 Q link[i].nextp=1;+ ?' l4 R8 n( B u. g8 L6 \
else* u. D) ~5 ]+ \
link[i].nextp=i+1;
' v" s0 i2 a$ E' k% ` F: G' m link[i].number=i;
& k9 p; D) `: t7 V; L# i}
& V) F6 [6 I# J h9 R6 S" Rprintf("\n");/ {0 K' h8 }) b0 E: f
count=0;9 O* M: n' Z0 o5 @
h=M;/ O" O' k: x4 i: |
printf("依次退出的猴子: \n");
' r6 h% x0 W/ C9 kwhile(count<M-1)4 ?1 m' A9 \. n6 T; R* C" @
{i=0;
" F1 A5 B1 k/ k. L2 Nwhile(i!=3)
" W' @: G x7 O3 n" A8 T{ h=link[h].nextp;1 u+ H. l# u0 v* \$ w
if(link[h].number)
! X: |, a7 W! U5 G- U* P i++;}0 v$ o# I5 `4 W' c3 u
3 e" y6 P3 `1 \- Zprintf("%4d",link[h].number);
+ F- k4 _% A. j6 }* jlink[h].number=0;* L, h8 u5 ^; F
count++;# E0 `' W( R, }, V
}( T7 J# R% n) t& c `
/ s& x ?% n1 W a! Cprintf("\n大王是:");
/ Q% c) o; S: a6 j0 T2 ^1 @, m for(i=1;i<=M;i++)1 e& T7 t2 i) b% G
if(link[i].number)
: D# B) A7 } q, a2 }& B W; Z printf("%3d\n",link[i].number);
: \0 F% @6 {9 r9 A; m. W: h/ Y3 K3 J3 G
' c- W6 X; K* |+ k9 G} 5 O* e9 b+ z% e9 D1 F' b
第三种是普通方法for循环+ ]- l, A+ I4 \$ {1 p5 S
#include<stdio.h>) U) v4 V8 a3 g5 ^
void main()9 W( t9 Y4 q! _2 v- x( ~, g
{ int i,k,m,n,num[50],q,*p;
3 D- I+ h" v l+ m; i' C clrscr();
7 x8 {$ Y0 H& ?6 u printf("input number of person: n=");
D+ }; Z3 J$ R& T scanf("%d",&n);9 Q! |" W4 ]0 ?
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
( a- G/ |6 G, [6 X% h scanf("%d",&q);7 x9 x8 G$ C" J
p=num;* C# p/ q8 O( d
for(i=0;i<n;i++), @ u, {+ m, e
*(p+i)=i+1;
, C8 J. N" I- m2 { i=0;; ^5 K' N: n* O4 z! s
k=0;
- o0 J! a+ y6 V$ u% E) e m=0;
7 W# n) ?% P: M3 X. K) @ while(m<n-1)
8 o; x4 ]* }1 D# ?# D {if(*(p+i)!=0) k++;
9 `; g' x( G) C if(k==q)- I0 J* R4 v5 w1 M3 z
{ *(p+i)=0;
! F; l/ } A4 ]1 d5 A; l k=0;' M2 `0 N1 N( A
m++;
2 N" T5 ?, F4 } s5 W6 V }% W: Z* L1 e( }/ q4 ` c9 X
i++;
/ u7 g D O( O) ^. j/ b' g if(i==n)i=0;$ v a5 C8 `/ j# \' M n8 J9 k8 t% V
} w8 F: L% G k/ M e
while(*p==0)p++;
9 s* I8 }: Y7 F7 T* Z( ~: T printf("The last one is NO:%d\n",*p);( _; f2 w9 T' v' R' x: C% N6 F S+ k
getch();
4 [- T% i4 l- W N: S5 |
2 t' S) m8 K! W2 _! j} |
|