|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!/ V6 {* w+ c+ g9 A: H/ x! ?% h) m
这几天我在忙着编一个问题,我用了一种方法编出来!
6 ?& G0 y4 ?# [但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!1 J2 G4 [. G7 l# y5 S
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 # w& `5 T' E J c& P. l
( ]5 T4 P$ k" F! g' ^) u3 k+ l0 [1 A7 q/ {7 K
题目
9 i. }% b) _( {' L; d山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。: ?. O% t3 z$ W
第一种方法:利用循环链表
1 F5 x+ a# O0 t0 O7 \" @! H0 \2 d#include<stdio.h>5 ?; A8 | m" @- p c
#include<malloc.h>8 ]3 x+ b. A, |( x$ m
#define M 8 //共有8只猴子+ S8 V9 `2 F v! a
#define N 3 //数到3只时退出第三只
# c& H9 k0 E& x- z# t! F* l, `8 ntypedef struct monkey3 e4 ^% f- \7 X
{int number;9 X K5 _6 Q) B8 {. g6 u
int flag;
$ h/ w5 X3 N8 k% sstruct monkey* next;! I. a- q% X4 h- W0 S( Q/ R; \
}MONKEY;
2 l1 ~! k; E% n- r+ ymain()8 [& g1 y# P% R3 w2 m( m8 P
{ MONKEY *head=NULL,*p,*s;
( @* V, F" a" V( ?8 w2 {/ I4 \ int i,sum=0,count=0;/ w2 {+ f8 c+ h9 q! ^
clrscr(); //清屏$ {: w5 |" Q2 W8 R3 u. _) G6 r
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存1 Y5 v& } q( N3 U& |$ x
p->number=1;p->flag=1;0 S' L4 s3 R* V( i! W: L
p->next=head;. D2 n& U2 v, G; V7 S
head=p;
( s: y, \& e9 v* j8 W for(i=2;i<=M;i++)3 E! l2 K# d; y* F3 W O! ^6 f/ P% T
{ s=(MONKEY *)malloc(sizeof(MONKEY));& p! U- ?" _: c" A# I( U
s->number=i;s->flag=1;
7 \6 e" X9 H4 W! r1 r' _+ X s->next=head;
' t+ t! ^/ c, O, \ p->next=s;p=p->next;
$ ~6 M* P6 [' R1 g7 b* \( ~ }6 N5 m; O: ]% y s; r
p=head;
% K* s! f* W& S& z! N2 ? for(;;)9 z+ Q% G' _& c4 w2 X# ^
{if(p->flag==1)
, n/ D) d$ a3 v% U count++;- N; f1 L) M- t X4 ?
if(count==N)+ z4 e0 h, Y1 G, l2 c% P
{p->flag=0;5 q2 `+ e' w8 E }' P
count=0;
$ T% g1 y$ ]+ k( ]8 Y sum++;}: O4 y" m" J, Y z( J' t8 w
if(sum==M-1)/ C) g; _' b1 f* a- p
break;& O3 j" ?- e6 b2 p5 j8 }
p=p->next;# T& U+ w! \* f5 m' |; Q+ O1 E
}
: d8 r7 r& y6 V" `0 T6 } p=0 e1 V9 U4 ?$ h! z; t |$ t
head;3 A" E, y# |* n7 k1 m/ J0 y& | d
for(i=1;i<=M;i++)
) Z$ s2 k1 U. \! Z; t { if(p->flag==1)
k/ r3 K% X6 E" q+ P* @, ?0 N printf("\t%d",p->number);
; w8 I/ @/ P w6 c* r2 { p=p->next;: y2 k# T- L* |3 Q
}
/ R! U( l3 n2 U) ]
5 L3 U* N' X" z
) P. p. D; N$ m% D% _* v" Q$ M
7 F$ c* t' x9 k4 g# H9 ?' c/ b2 h} - \1 N2 E0 q+ V
第二种方法:数组
9 T7 e1 X5 d5 l) N" c; @' V# ^#include<stdio.h>
- H( {. q6 J+ m/ ?#define M 8
0 a5 R2 [% U( c2 A! e+ {9 Wstruct monkey _* N, |5 P" O- }8 N) J g
{int number;1 ]- V; q7 j. M8 t3 T
int nextp;
& ~! _* `8 P6 _; g1 v: z$ g}link[M+1];' Z$ e* t& g- \* F( h, j9 g: i" }1 P
' T1 |/ _( D; f( j5 a% k( Lvoid main()
/ O. o* q- Q! V3 N4 [2 h{int i,count,h;; h6 a6 M0 }6 |/ C2 \3 b9 V9 i# P
for(i=1;i<=M;i++)6 G' _9 v4 F: b
{ if(i==M)0 k% q# S7 P1 V) I* W4 P5 a2 E4 ^
link[i].nextp=1;
; v" u- J6 H1 J else
* y) ?" @' i! t0 b2 D& O1 ] link[i].nextp=i+1;
2 |# Z7 _! L0 v: w. X3 T link[i].number=i;
+ r# n- O9 j- X/ [6 X5 v1 a! Z: n}
+ I3 E' P: I* W7 u+ P, F. [+ Fprintf("\n");
" K( X) s- O# f. C0 ?count=0;
& P' d& a3 k# H- }" Y. qh=M;* N( P, d* i A: u1 R
printf("依次退出的猴子: \n");
. `& Q1 a+ p) u2 i0 k7 owhile(count<M-1)
5 |) m l3 V2 Q$ b) o( s" k{i=0;
. e% |0 Q0 ?" w( ~2 p4 J5 r# xwhile(i!=3)
$ [/ X1 N4 P! F) b* Q{ h=link[h].nextp;: o1 G. ?- `$ p; N
if(link[h].number). L' \8 `7 ?" R1 g! I! c
i++;}
- ]% q- o {" G
1 C# f& b/ c# K7 z$ s1 ?printf("%4d",link[h].number);8 M8 a5 ^. u' m* ?4 r* D
link[h].number=0;
3 d; o+ \, ^2 O6 ccount++;
0 a+ M* e# x% `/ J}( v/ J2 n4 Y6 J; @$ x, |! ~) B+ o' s
4 V5 C+ Y) p1 C/ cprintf("\n大王是:");
! O- a3 S/ `$ t+ _ for(i=1;i<=M;i++)& T5 G6 }/ T" C6 M+ G/ ?- Y
if(link[i].number)! z: Z. f4 v; w2 C: @! B, F$ V
printf("%3d\n",link[i].number);( w1 o! w6 z9 Y, I9 I
1 Q6 i7 d }5 k2 G; R; L7 p
# r1 U, l( ]* Y9 C% {9 W; y} 4 m8 G6 J0 A7 X
第三种是普通方法for循环( C6 k( X+ `9 h( n$ T% W g
#include<stdio.h>
, c e) [( n9 U$ pvoid main(): M4 w6 P) F7 D
{ int i,k,m,n,num[50],q,*p;
) S; D0 P/ L2 M* v" c clrscr();
" b6 J( W1 V' t printf("input number of person: n=");: e6 j& M5 w) l- x' i* G8 g
scanf("%d",&n);
: L0 ]$ z/ I7 }. ~2 Nprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只% L5 G: |0 H- l) p% S" t
scanf("%d",&q);1 F7 y& j1 r2 r) \& w$ r" n
p=num;/ g( K) c8 q- R, l
for(i=0;i<n;i++)$ R) {" N" U, X9 h5 [- O
*(p+i)=i+1;
4 a. q; K9 E0 O i=0;
, F8 n) X- u d4 z4 C- x4 P k=0;4 Q# y9 v+ z M, h+ Y% y' X2 y
m=0;
( f' }) t; I; j/ n while(m<n-1)' E- W5 M7 x( K4 U$ @, U6 j
{if(*(p+i)!=0) k++;
8 Y( h5 F+ G$ \: l* f4 T if(k==q)
3 Y8 B4 O; r: R5 h$ v3 P { *(p+i)=0;- J8 h! y8 G: C4 O
k=0;' }6 e _8 V& V9 }# h+ c1 M% o2 v
m++;
l0 N" {- g; L: Y. W$ K6 A }
! i. K7 H2 A# E) k i++;
7 j, p5 [- c5 l0 u# G/ ] if(i==n)i=0;
5 d+ U, R# s! |" F/ [ }
6 J' ]! x8 g4 r/ ~. `* ~ while(*p==0)p++;
8 s3 v8 X! \6 g B: q5 R3 Z printf("The last one is NO:%d\n",*p);
0 L( R$ {+ x' q( W6 R0 ] getch();
: a; G3 |+ N( k% j& ]* R+ N# p7 y7 D( y. }" L" ^
} |
|