|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!# X- L. t9 B9 V0 D q
这几天我在忙着编一个问题,我用了一种方法编出来!$ e0 G/ |( Q% I9 Q7 s D
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
$ }- b; J- q/ [1 B注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 ) u! w- \& c% X, B" ]/ L3 ?
0 }1 R* ]9 {+ O1 W& I9 o' _
) k$ W* ^8 S* b( t
题目. y4 ~% E" P8 ^+ [7 e' {# [
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。$ b, E$ n. I. Z
第一种方法:利用循环链表- g# a! [+ W: _+ n& z% F
#include<stdio.h> u7 r* W0 z' B$ ~" h
#include<malloc.h>/ Y+ w5 t+ H6 G% l ]7 I4 R
#define M 8 //共有8只猴子7 \2 \( q' T# {3 B9 y1 [; l
#define N 3 //数到3只时退出第三只
$ ^" b) K/ r. Vtypedef struct monkey
, r' I5 r9 [: A2 q2 U8 X: z{int number;3 _7 T; u0 U0 M* h. Z8 _
int flag;
5 J5 I9 \% w% u5 n& cstruct monkey* next;: H5 e" a% S& M, o$ e# r) a
}MONKEY;* y8 e) y9 g3 b) s* A& W- R
main()
# S+ Z" A3 I! S5 A, C4 V{ MONKEY *head=NULL,*p,*s;# U% y. Z2 B) }* L* Z. ]
int i,sum=0,count=0;$ z) E/ P" ^7 @5 q* B
clrscr(); //清屏
- C9 [1 q0 ?. y9 p5 ^1 S1 M6 S p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存* b' O6 s" h! a7 o) l# K
p->number=1;p->flag=1;: f% n$ R6 N* i7 Z& @2 w& S/ D
p->next=head;* _4 X/ d' _- ^9 U
head=p;7 r9 f4 w$ K4 }8 n
for(i=2;i<=M;i++)
4 T/ P* D5 s( g& e+ S4 ` { s=(MONKEY *)malloc(sizeof(MONKEY));1 |. S2 w @# C. ]/ a" j) H
s->number=i;s->flag=1;; ^) Q8 ?. Q4 G$ ?- M: V5 K
s->next=head;7 |' M2 c7 K: u
p->next=s;p=p->next;
3 N) [5 D6 |$ A/ t- D8 C }* L; f& z$ b. h5 C& w% W
p=head;
4 y# o$ J* x* A3 z for(;;)/ m& ~+ A4 H! r* r; |
{if(p->flag==1)
" E, ~. [7 {. ^ c% @! P count++;
: ?1 c, D3 _$ E: x. W if(count==N)
: A; z1 z/ O% X$ F {p->flag=0;
5 ?+ m% U( M5 v5 x9 l2 t& k1 J count=0;
) A+ p+ x: ~! d. l: [0 H sum++;}8 T( `( o2 b5 l8 ?! l! G
if(sum==M-1)" e6 f% _' B* O0 x5 @" P
break;
. I& S7 S) N) Z5 O p=p->next;) \% ^0 o" M9 t( g4 V
}
, A4 q# k3 x* q4 D/ @$ T% Z' O p=4 R5 W7 A, A* x5 p5 n' P; A0 l
head;
8 v6 g- _( O* F V1 l, Q& f for(i=1;i<=M;i++)2 S" U+ ?0 @$ m! L5 t8 p
{ if(p->flag==1)
& W6 b! r; t7 V5 P% \ printf("\t%d",p->number);
% a; u* G3 P1 l, t* P p=p->next;
5 c( ^7 d7 i6 Z }- l" C( X" t; U, r& u
% e. s5 J) Z" q" J9 E0 i) I4 ?+ u, p
* U6 d$ _" K% L, Q
2 ~2 T- M0 A$ x6 w4 G
} 4 u, F0 l8 U# i) }# Z
第二种方法:数组! I6 Q! @4 h" W& M# i" F4 U
#include<stdio.h>5 @2 l6 k# S$ g5 g- ?
#define M 8
( s8 c) A+ X' \7 hstruct monkey
& h, l2 z# g9 F{int number;
9 B p- f" p8 C- b/ Oint nextp;
, W2 t' H! z) P6 I}link[M+1];; v$ ~ G; T& f: E! y
. d0 U) K$ F1 U% k6 X
void main()
9 f/ R, X! x: {/ h0 W{int i,count,h;
; Y+ b& e& R9 F a5 d9 E: o- Vfor(i=1;i<=M;i++)3 t2 G! u9 `1 I4 E" D! w/ f# @% K9 x
{ if(i==M)
3 `/ S4 i7 o @, U8 V8 N# q/ y link[i].nextp=1;
! t' ~) O- B7 [ else$ q! t# e; p& B. O
link[i].nextp=i+1;
3 G+ b" U. m! Z link[i].number=i;
. j/ @6 U! ~ S, ~}# C" R7 N) v! T: y
printf("\n");
{7 E, w3 O+ a6 w. \$ J6 }) Ncount=0;
1 v) E. a! }2 kh=M;
, F# @7 G, T! u3 J" Nprintf("依次退出的猴子: \n");4 F, N+ K. r! ^; K- p6 w5 L/ L
while(count<M-1)
q, g/ {8 ]# A- T! R+ G1 ^ @; j* F{i=0;+ Q8 k8 k0 v8 n0 ]8 M1 G( Y: i
while(i!=3)
. f0 V( }3 ~- p( ]{ h=link[h].nextp;
2 } @3 }! R- U' ^$ J if(link[h].number)" Y% \" i) S0 t) B7 X
i++;}
1 o+ X+ B* {) O# q+ U+ H0 W. h% s$ H6 J: P0 K2 s
printf("%4d",link[h].number);
7 Z& U0 \8 Q1 \5 f$ ]3 Elink[h].number=0;
2 }4 V0 l4 B- i1 ^! I2 y& M- Xcount++;: j+ @. h% ?! c0 S% I
}
6 E, ^: ]) T; Z& e+ u3 O2 t& n& M3 h4 C$ T, }$ N9 M# U7 S
printf("\n大王是:");% k# z9 t5 D+ \0 f9 \9 l
for(i=1;i<=M;i++)1 w1 T7 q9 p& J$ U2 s* c
if(link[i].number)
% u. P/ l+ f" @. v) g$ a* W printf("%3d\n",link[i].number);) H0 X6 g: e& p5 ^! C
8 R+ P! `, q1 l" K; h
( F: ]9 g# x$ b6 w7 W: a}
% `- Q* a/ U$ ?3 b; a第三种是普通方法for循环
' G0 l/ y# T0 g% C0 W#include<stdio.h>
9 u3 }' M, T& n0 L% x. {void main()- E1 T( T$ [4 e V
{ int i,k,m,n,num[50],q,*p;& S4 ]2 j9 W/ p2 U, Q/ f
clrscr();
6 m0 b% y! O( M6 E8 L+ {& d1 d printf("input number of person: n=");6 p; y5 Z4 ?( l; `" p3 p7 C. @
scanf("%d",&n);
' Q/ D; I( I. Vprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只" I6 _9 [- @- X$ ?( f9 t! l% q
scanf("%d",&q);/ c+ y- c% @" U0 d# K
p=num;& O$ T0 C$ k9 d, ]; p6 N
for(i=0;i<n;i++)
. K* `- f) X) }. k* z$ g- A/ H *(p+i)=i+1;
. o6 d; r7 V9 ~, W& a# H6 w i=0;& c% c$ e) M- `- t I* `5 F
k=0;
' O. o3 H( G T# b1 f7 j m=0;& W& h0 `( }5 c2 P
while(m<n-1)
$ L2 t8 L6 N5 }+ b5 ` {if(*(p+i)!=0) k++;- q* Q7 {. i! x5 d8 n- x1 r
if(k==q)
2 G k; N% X6 K) } { *(p+i)=0;
8 b& g9 h l2 @8 q k=0; x1 v J: R9 ?0 t
m++;
, K0 O. q% A9 G1 r# m }( v& F; X( [7 B! A/ ^/ t
i++;
* `5 I. y1 \) ^8 y. T if(i==n)i=0;
7 Q% n$ C4 c* i6 `# A; ?" m }
1 U8 m/ c/ S* s4 d/ I. ?8 z8 y while(*p==0)p++;
" J) L6 {: L u- n; D9 ?: w* U printf("The last one is NO:%d\n",*p);6 {; K- l/ V' L8 S
getch();8 R! y, {/ J N8 I3 e# o9 C4 Q
. v z: z# g+ d4 W4 `' T} |
|