|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
×
大家好!9 |& H! T+ _8 ~$ \: ~+ s0 ~7 A( v9 d
这几天我在忙着编一个问题,我用了一种方法编出来!7 \0 I$ n% J) \/ \# x9 }
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!: w# _" A* F$ y+ J6 m
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
! h: ^$ [, Z3 V5 S4 D; h; r
. `7 X; \$ H m6 Y& U
9 ] M2 e W! P% E4 E 题目( m7 Z1 _$ r, _' h5 L$ v
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。; ?" g9 E5 [6 g, y8 J
第一种方法:利用循环链表7 Y" p. u' f" N+ O. F' t
#include<stdio.h>) f$ d/ w2 c7 e! d1 c& T
#include<malloc.h>5 r2 a# o( n8 O! i2 S5 d: s# g# d
#define M 8 //共有8只猴子
. L! h: S, C3 |% l* X. ]- I#define N 3 //数到3只时退出第三只5 y4 F3 G$ d! @+ _- n
typedef struct monkey
- ^( V$ M8 J5 v) l{int number;; c$ w0 ]0 U4 h$ O
int flag;4 g, U4 P1 ]$ A# h$ s# I
struct monkey* next;! P- N0 O4 x2 W O9 F$ V
}MONKEY;
; ~ T$ i6 n2 \main()5 d) R- k* S5 G* w6 I' h" p+ B0 f
{ MONKEY *head=NULL,*p,*s;) Y$ s2 B$ t3 t* g% @8 @, K& F
int i,sum=0,count=0;
9 p7 l) J! i! d6 u! ~ clrscr(); //清屏* ^: U. \! Q6 {4 M8 m
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存1 d- N2 h9 Y* u! _. o: E
p->number=1;p->flag=1;
8 ]$ t9 z. A: p5 l m p->next=head;
- X1 m& ]; r0 P1 R6 J0 { head=p;
3 T4 B& Q2 x, Q for(i=2;i<=M;i++)& G/ e6 z U! O. o' R) u
{ s=(MONKEY *)malloc(sizeof(MONKEY));1 r: [: ~: e9 s$ {4 P* L
s->number=i;s->flag=1;. Z! `) Y2 J# m
s->next=head;
1 O$ U; m" U8 A9 T/ ? p->next=s;p=p->next;
. B( [9 L7 u$ p5 k8 e1 J* _ }
: V+ C) O1 K; o3 G0 [* v2 F& { p=head;; ]$ e$ w% e9 G) ~+ _2 x
for(;;)
; ^! O( w# n" s3 q6 T1 W w& s {if(p->flag==1): a7 c! S" t6 D& m R: b
count++;/ S7 |2 S* N; F! P. v2 F
if(count==N)- w! ?2 C% J4 T6 [$ `( g
{p->flag=0;
: h2 H6 h+ N- g5 ^! L6 a count=0;2 z9 o/ L4 y K' k) T) I
sum++;}
* h9 h7 }* P- H. |3 c9 @ if(sum==M-1)4 a j8 N0 m5 M N7 l5 J
break;! R* f0 Z2 n( Z6 Y3 L9 o- v
p=p->next;
3 ~! G3 V. J# g }' B3 h1 ?) P4 k
p=
. K0 M9 e+ t% Y- n9 i6 q( x7 A head;
+ B+ d0 r M, j' i. B* T1 [. P for(i=1;i<=M;i++)
2 ?. E, ? t7 ^ { if(p->flag==1)$ k. @; C h# @$ c- p: J
printf("\t%d",p->number);" h2 ^- ]8 Z$ J% I8 @
p=p->next;
# D8 k7 F" n0 U* Z/ h5 D: `' y }' P" F* ^, V( b: A" F: ~
) |% N z/ |3 y0 J5 Z/ {
4 [) D. W9 p. E5 ^" l2 j/ @
" m8 e; \9 c" [' k
} - t& A4 M& m: V- ?( S1 ?
第二种方法:数组
3 M( {- t& g" h& g0 C" y- }#include<stdio.h>
6 H4 g0 W+ X+ U' T6 u, w( Z( z/ e#define M 8
7 ^+ E, i! x! M5 r7 {$ w pstruct monkey9 I5 V- p: r# {8 T
{int number;9 @3 R% I0 J4 v5 x/ ^+ s
int nextp;
$ }- F/ _, C' V: y$ T}link[M+1];
1 W& _ N8 V$ I5 q) b
- o7 s/ i4 d6 f% R8 V# L+ |; Q6 Xvoid main()
/ {: T5 ` P9 l% W* i{int i,count,h;
: i- c' {* e- K; s) e4 qfor(i=1;i<=M;i++)
3 L, |1 t2 _, |{ if(i==M), n' r7 s7 S3 c0 q/ _! D+ Z: f
link.nextp=1;3 C7 t1 L5 o" V$ o) H
else
z. g& w) G( \: [) _ link.nextp=i+1;3 J+ \: R* {4 ?. T5 U
link.number=i;+ @' o# y1 B- g3 K" U
}
3 x1 F1 d7 [4 A1 hprintf("\n");
' p* T3 v. Q: o7 u) e8 w/ R5 S3 ucount=0;
( E4 g+ h% C+ @h=M;2 p7 a/ I. Y( Q5 W% C& w
printf("依次退出的猴子: \n");
4 J" A, S. j a3 Awhile(count<M-1)6 e" N3 X/ L8 m
{i=0;
" H* i H' S3 t3 j. k: c. F; v Jwhile(i!=3)# s; D- M/ d y2 J( L9 e5 \
{ h=link[h].nextp;
$ L: l) K2 ^# ]% V" ?" B" W if(link[h].number)
u2 T3 S4 O* c2 i i++;}
" O& i* N' r, \+ x: f$ F$ ]2 ~5 W* M! }6 s
printf("%4d",link[h].number);0 Z, N+ l* G8 f, J. c
link[h].number=0;
2 q8 w6 y, A3 l* l+ Icount++;
- f, V- s0 E& R% u* G. z+ k}
% B/ ~' E# ]8 Y8 `: J) z* |$ u. `# F n6 X" q1 v' y
printf("\n大王是:");
% q) H3 v$ J2 W; I5 L for(i=1;i<=M;i++)
% \' q; u6 U! O if(link.number)
" n5 Q2 L( o5 C7 J4 m" h printf("%3d\n",link.number);: l3 w1 U8 [: \7 `1 o7 U5 Z$ |
8 J+ u/ _& X/ Q! R; c* P
+ V% A- Z# [, S9 M} 5 F" V7 L% N, J# z1 ]3 x }9 h
第三种是普通方法for循环
9 |; B9 j3 S* a#include<stdio.h>
$ l' b( Q9 g0 A, f0 ?- ^void main()
9 X4 l l9 x& S" H2 x{ int i,k,m,n,num[50],q,*p;& B9 d. J# i3 c4 w
clrscr();9 Y% a( Z) x/ H0 B/ ]; u& t
printf("input number of person: n=");" C8 Q4 n+ h( a/ C3 k
scanf("%d",&n);- S! G8 }$ i/ [% v3 P- k
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只6 [- ]7 T: e1 s) _2 D Q) o
scanf("%d",&q);+ V x4 M* H/ F% Z; g2 { {
p=num;
! j1 \1 p! E/ } for(i=0;i<n;i++)
, c6 ?& k# |1 H) E( k *(p+i)=i+1;
, s( L7 L# @; `% F( v( y i=0; C5 [: U& \0 `/ z
k=0;0 T: R- p- C( ~' i
m=0;! G; ?! h# P! l/ r4 `# i& B
while(m<n-1)* e3 o* S$ m1 V/ h D3 w' M
{if(*(p+i)!=0) k++;0 l; G$ f- k8 l
if(k==q)" {! S6 {6 {+ ?" h, r9 J
{ *(p+i)=0;
3 V) v( Q: X9 f" g- C/ h k=0;' t' O( Z8 y- H2 N' ?$ p
m++;
5 C" _9 l" a! W; e }8 h7 }% q5 `4 Y. |+ S
i++;5 p$ h3 B. T# X
if(i==n)i=0;* q* U0 l) N" ?, [# A% b
}: g3 Q; Q7 V x& _
while(*p==0)p++;
" _- h2 y: r% P" ] printf("The last one is NO:%d\n",*p);6 J' P, N: T& H" m7 o
getch();4 l: \% f) r( e8 A& h4 B$ ^
4 Y" D/ ?7 Y) Q3 |* {1 D% o7 X} |
|