|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
8 {7 j. O d+ b7 V; Z# a1 H这几天我在忙着编一个问题,我用了一种方法编出来!
9 d$ C2 E) R& R但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
7 j, ]2 r) `$ o5 u+ b注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 4 R0 ~# D1 Y- l- @
& {' H. f1 }5 K0 u8 x6 s+ |
! a# ?; k1 q3 v8 v0 ?: O$ K( J! @3 ? 题目5 _* S. c; C1 j$ i w
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
9 D+ i) x+ |: ^" X第一种方法:利用循环链表
( }! ~9 j- E& L, c0 k5 P9 I#include<stdio.h>5 t$ W% a8 e; B, e+ H3 S# k
#include<malloc.h>
: v3 z5 W( E4 G$ {; ^& x( E#define M 8 //共有8只猴子
4 h$ @0 e+ m: D6 r1 _! ^8 L; K1 r#define N 3 //数到3只时退出第三只
. \0 P5 L/ d; j/ Xtypedef struct monkey
* B: N P6 D% g# D{int number;+ a- p# Q+ X) Z) B$ p* D( x1 I( r
int flag;; Y0 i% P N# {! ?6 ~# g* g# Z
struct monkey* next;
1 v" g) A4 x1 z1 z/ t}MONKEY;
( n. s( ~ i2 ymain() Y' M( O9 a/ v9 {4 `, M
{ MONKEY *head=NULL,*p,*s;$ I* B6 n) m5 i
int i,sum=0,count=0;
) K: b; j6 T0 F5 ?( n clrscr(); //清屏& f! \8 P- l" c) M( g- {! q
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存6 X1 D: M- {- f" ^
p->number=1;p->flag=1;' _6 Y6 m+ x) ~3 B: t
p->next=head;
: S) [) M2 n2 `9 K) d head=p;
+ ^7 t6 V/ P4 u for(i=2;i<=M;i++)
& K2 |8 @0 B x$ M% Q7 N { s=(MONKEY *)malloc(sizeof(MONKEY));- ~0 i6 \! q" O) c6 @4 x8 `# p" ^
s->number=i;s->flag=1;
6 `6 Q5 G* h7 X& X s->next=head;
# V: w+ U4 T; o+ B4 v+ y p->next=s;p=p->next; V$ J. m( ~& D5 ]' h, V- R" Z. D% z
}
, D! Q# D3 ^' f% w7 r [ p=head;
. B# I5 t9 q! `$ u/ N) e& {* e for(;;)
0 R* a( r4 A, N! H/ q. J {if(p->flag==1)
# G7 u }4 Q" P count++;
e+ y' T# e* U) K- D, O: U B if(count==N)0 c; p. I# ~3 f- x6 l
{p->flag=0;- a' i d J4 P& U$ L
count=0;
4 p1 `$ y( q3 Y( @ d sum++;}
9 R, o) l$ ]5 N, ^4 |) F, D; h if(sum==M-1)
' O, n- q; k3 p7 j6 V break; P; m$ P5 y/ j5 v
p=p->next;: d7 ]% w l3 e1 A" |1 j
}
( f( ]& Q( o! g% G1 V, g- k p=
1 ]7 U$ S3 m, A: |0 U1 f, B head;5 Q3 g* H L0 f2 E4 o4 d& T/ F
for(i=1;i<=M;i++)' m6 L) J- R: x4 S0 J6 t8 L
{ if(p->flag==1)6 I y7 }; @6 C& I, I7 g
printf("\t%d",p->number);
1 M/ `9 v5 C& ~; v% f p=p->next;) C7 b* N2 k6 d3 V
}+ M# N- E% ?' N* a% F1 C
* _/ a( Q$ b' L: [/ u0 [( B
& \8 s! R, M! p# F
$ w1 ~, t; x1 Y W6 @, |* Y
} 5 a, U: ~0 e0 s2 ~5 k+ C
第二种方法:数组
3 o1 k# w3 f! D; Y Z#include<stdio.h>6 F) q: N' B, R4 ?/ Q- k
#define M 8. G- ~) ~! d/ q5 P
struct monkey
+ w9 ]* v" ^+ X: w0 r3 @2 o{int number;. `- S5 N5 u' G# k: u l- Z6 E
int nextp;# F1 H4 w$ O7 M0 _4 M. }
}link[M+1];
0 @1 o5 A6 q7 D' H3 u4 N& C7 p5 B8 o2 {# C( i
void main()6 p, W- h% v; b, m7 `! J+ q6 ?
{int i,count,h;2 Q* @6 ]4 g- A( Q3 ]
for(i=1;i<=M;i++)
! L! A8 N+ j" ?7 Y9 r{ if(i==M)
5 j. d6 U' B4 b0 p0 }/ e link[i].nextp=1;) B, l2 G! R/ f, J+ r
else
0 F. V7 Q$ T2 k3 ]! h- u( j link[i].nextp=i+1;
( f% s' z* @0 E9 k& @. g link[i].number=i;
@1 I. A6 J9 Z% Z! u8 t) }9 V}
. _7 k5 e$ J/ @4 Uprintf("\n");/ k2 _6 D- k4 ~2 o/ g# D4 u# ?1 y
count=0;, [# d; F1 d3 j l5 ^
h=M;! E9 Q) \; p6 l7 z- d, O
printf("依次退出的猴子: \n");
, A; j w L% K# H. D% Nwhile(count<M-1)
% V6 I/ D' Q7 E{i=0;7 A9 [6 c5 p% T
while(i!=3)) y- y9 V0 Q$ g8 P d' T/ T0 X; @
{ h=link[h].nextp;
" |/ @9 S$ ]8 p# Q3 Q y* @& j if(link[h].number)# U' f* j/ A, u" N/ q1 U
i++;}
- J2 ~0 n/ p# ?1 F. d& r
, f% V( Y# R' o+ N+ z, ~printf("%4d",link[h].number);# [) a5 x9 {9 y0 X6 S
link[h].number=0;$ Y Z5 ]$ R% M: N' v# X$ a5 J! N
count++;- l0 b; W6 o3 H$ J: y
}
% V, d) D. @' b) u' B9 P% q( a' N3 ~& n
printf("\n大王是:");
# I# b! t3 p/ t' r% k3 E. B for(i=1;i<=M;i++)
7 H& ]9 _: T6 O1 G' V if(link[i].number)/ ]. H5 ]. O+ h2 v
printf("%3d\n",link[i].number);
4 E* ]" t3 q( @ j( _1 { d% t7 g7 X4 x
- n! [# [$ W4 C6 c J}
" Q# u% Y& R+ I2 F第三种是普通方法for循环
6 L: V3 F$ r3 n' Y#include<stdio.h>
7 t: r d% @' Kvoid main()+ C% v3 e6 J4 u9 m, s
{ int i,k,m,n,num[50],q,*p;4 F0 a& `, w3 z0 T# Y
clrscr();
' G# ?* `9 K. p printf("input number of person: n=");
; g, R$ W( p! V3 D+ J1 x scanf("%d",&n);
+ r9 v! B; Q. u, F: L7 Xprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只2 ~: k& E5 J; }( Y( K) |
scanf("%d",&q);
+ \; D% ~. N) A. ]2 } p=num;
, d4 ~' J" H* F" q5 q4 P" P for(i=0;i<n;i++)
) c' n# t9 ^! b( ?6 q2 M *(p+i)=i+1;( K. C1 B7 f, A, C
i=0;6 v' b6 ]5 n4 o1 N& p. h& ^
k=0;; w( R$ t; L2 O3 f! w
m=0;; b$ Y! P$ ^6 v; D7 e- _9 a6 P
while(m<n-1)
0 R. X4 @* g6 J1 M {if(*(p+i)!=0) k++;' }9 d( P; Q+ @ P
if(k==q)
" M9 M1 J) i" ?% g; Q+ ` n* p { *(p+i)=0;
5 ?9 N1 V9 l! d2 h k=0;, Z) {# s+ e' X
m++;
, o. u' m, u) { q6 r }7 d5 W+ n* _' T) ]
i++;
) j% [6 x+ r5 M* O, Z7 e if(i==n)i=0;, Q/ V) ~( l& K* k3 a% W" p
}6 }1 i% N N# B& r- a
while(*p==0)p++;# F3 h2 j- F4 m* n) J' w4 ]
printf("The last one is NO:%d\n",*p);5 W9 s! ^2 ~" W$ d
getch();
: c4 P8 z. c& I, v+ {' @
! \ L, C7 X& h- L0 n} |
|