|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
: s6 w1 }0 I( r( f7 X7 k: o这几天我在忙着编一个问题,我用了一种方法编出来!
# d5 k. d( d, L' I. G! |但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
2 j. p; s0 D9 ~; L' m注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
` j) c6 S# ^& S: ^' K
' w; _" t o1 Q" O' Y
: b5 ]+ m0 Q9 s, ?: N0 ^ 题目( y6 e1 r6 y% U0 y/ M) _+ l( m* I
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。$ R/ m5 u3 m* j3 Y1 w
第一种方法:利用循环链表
. Y+ h6 [; a1 o( f7 A#include<stdio.h>
' \, _: u1 l5 ~#include<malloc.h>
. \6 D x0 s% a0 n0 H#define M 8 //共有8只猴子2 p) E. i- r8 {% g
#define N 3 //数到3只时退出第三只5 A1 s: J, K$ n/ ?, s) D8 X" A
typedef struct monkey3 C! i9 \$ c) T y! ?
{int number;; D2 D3 k0 ? B
int flag;8 k% | V6 o1 ^" U7 Y' j' H
struct monkey* next;
& i6 |* Z( w; p( e}MONKEY;. l3 c" F& g3 f% U: q: Q2 W, b- x2 q
main()$ T+ P3 n) r! v1 N9 ~
{ MONKEY *head=NULL,*p,*s;* }2 m# B4 w3 Q$ o7 B; U% S+ t2 e6 I2 h
int i,sum=0,count=0;
& ~- k1 Z$ z! e$ U5 z& E, D clrscr(); //清屏( T: ]1 \0 L' C* o, v: M# U9 N
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存8 c5 G) }+ q* I9 Z3 U
p->number=1;p->flag=1;; |/ _/ J8 Y' u1 V$ u% L
p->next=head;
0 |3 ~( x9 X1 |7 f2 f' @ head=p;( C" C( W: B1 b; W& d5 E
for(i=2;i<=M;i++)* ~; s! S A2 O
{ s=(MONKEY *)malloc(sizeof(MONKEY));
5 F3 I% ]2 o% o% F0 |* w s->number=i;s->flag=1;
+ V& [3 g( t6 N; g5 i% a. L) v s->next=head;
- b# H1 y5 b2 `* X1 S" p p->next=s;p=p->next;* x$ \: ^6 x* {+ G1 \
}/ I& T' F7 `: j' w
p=head;
1 }- ?6 R3 N |* L) z for(;;)
; F6 q) y" i3 z+ u3 H {if(p->flag==1)
4 N) W7 K" v8 I0 B0 a$ v count++;7 }2 _4 o$ F5 T p3 V- `) G) B7 L7 X0 i
if(count==N)
( x8 F6 m9 N' S5 f& A) `- f: p4 F {p->flag=0;' z5 v0 A1 c# b0 b& O( T6 u) O) Q" z
count=0;% |$ K9 L: f+ A4 T
sum++;}1 W4 R+ E( u, X: [" T G" @
if(sum==M-1); Z& _3 @: J1 D# b, f
break;
# ?6 @8 R5 {) b7 [) _* Q3 ?7 { p=p->next;
/ E" {/ G9 c' V+ v4 Z) z% q! b }
1 s: \7 k V- ?6 N p=
0 H( p: T) r% c% n head;9 f4 S5 V: d1 f% a! P
for(i=1;i<=M;i++)
9 t/ A) \' B$ l5 I' R+ I0 J { if(p->flag==1)
' @6 F, A, j) N& J8 z1 B printf("\t%d",p->number);1 Q2 F% Q! b! P9 p8 d/ B
p=p->next;
$ \. J1 X# Z `1 v9 \: G }! k/ b# p% [- G: C7 X
, y: P5 N$ r/ {9 V* F% y" _1 y
2 u" P/ Q7 J5 q2 S3 N5 E! I" z
* C" W3 m! g5 x. i! U}
, I1 M/ T' ^* i" A. ?4 b2 K第二种方法:数组
7 a; q7 S+ m" E/ \+ N: Y( F#include<stdio.h>
) F0 ]6 L- P! i; B5 T#define M 8
7 H7 r, z7 P0 P! ^0 bstruct monkey5 a$ @# u& i& A1 i
{int number;" j. F o" w& \& I" g, l- C
int nextp;
! R9 z" C7 E" L. d4 c {) ^& h0 \}link[M+1];) D u* h2 ^4 U2 v# d/ A' M6 G
3 ~7 Z$ b7 J; i6 S* L
void main()$ y9 e6 F5 G9 d+ A
{int i,count,h;0 \0 H5 w; w+ h/ Z. l* d
for(i=1;i<=M;i++)3 y+ V8 p/ O4 P: s1 {
{ if(i==M)
+ q+ x/ D/ ] ^1 A link[i].nextp=1;( L" A z4 _7 H2 c! i
else
/ Q s2 e- x! m5 J link[i].nextp=i+1;* w. O4 }3 e: F% Z7 m
link[i].number=i;, z5 Y1 b; E- Q
}
# h H7 d1 m! w0 T# v) f) Fprintf("\n");0 {+ P" { V* X6 X# k* x Y R
count=0;" t, @( a% {8 ~1 Z; o
h=M;" v& Z6 y7 ^' L& d( V# j/ }- a
printf("依次退出的猴子: \n");
& G4 d G7 l! t9 [while(count<M-1)$ w! {1 J. }' d' E9 d
{i=0;/ M* y7 A# P5 ~* s/ C
while(i!=3)
3 A1 [# l/ ~0 d" Q3 f$ k, ]{ h=link[h].nextp;
0 k2 J% ^8 F$ @) y if(link[h].number)
; l" S) h E% I i++;}
5 D$ y4 A7 Q/ b @" ~+ [% J) d9 v. h# P( n# @* X! ?
printf("%4d",link[h].number);5 |% L- _( N* m! N1 {- C, u
link[h].number=0;
/ ~+ l' @# K* h) tcount++;
- i" o0 m, A' [}8 }9 n2 W5 ]5 Z0 E
& a8 d+ b# [# L9 g! r& B4 D
printf("\n大王是:");! W# s# c. j6 C, _4 \( l' C, ^
for(i=1;i<=M;i++)3 x$ ~9 R8 \7 w$ L# C7 r
if(link[i].number)8 V. T. |1 G, E4 }1 w
printf("%3d\n",link[i].number);
$ ?8 J0 e* E' G2 K
+ W5 V" l7 g3 s
2 h0 m5 V, L' w: E% r' L# H- S) i8 v} " B: w- ]7 Y4 b: T; w, o: Z
第三种是普通方法for循环
' x& p! }1 T+ O#include<stdio.h>8 j. m: D7 a* Q, v" H6 u' i% U: _: L
void main()4 g& i& ~# O+ ]( O8 s) b& s
{ int i,k,m,n,num[50],q,*p;
9 K% |0 i. {% @ clrscr();5 M, g& {3 B* l! b% B( r
printf("input number of person: n=");+ [1 K8 i z& x
scanf("%d",&n);
, J) f* J2 i- K3 s" _7 a2 aprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只- V- \0 C* s; F4 @0 E2 R
scanf("%d",&q);* v m* A* N& d' \
p=num;
& P B( Q! n( v for(i=0;i<n;i++)/ G+ {7 k/ w, V6 f; A1 }2 L
*(p+i)=i+1;
7 B; M4 z' e0 T- \& | i=0;
8 Y3 T- S9 ` G1 g, {% i. A: ^ k=0;2 z+ k( @' y q8 o3 l
m=0;) P I$ F2 y8 g4 }: }* w s
while(m<n-1)
- E& I S5 P& F/ f, y* r {if(*(p+i)!=0) k++;
) {4 b. P: g: U/ G3 w( ~ if(k==q)
( g% Y$ R3 [8 w U+ Y. w4 ~ { *(p+i)=0;
' c# N+ K* d6 M/ }% |" b2 H k=0;
* ~% |( g# {/ ?) } m++;* C1 Q% c( Z. _. L; y3 c" Z) T
}7 ?. _! R( k% o$ z6 w
i++;
2 e% m( ]; \0 x) n* d7 [( K, W' q if(i==n)i=0;
$ ^' _& E5 ]8 f+ ^" S }
1 P5 v" g5 O! H while(*p==0)p++;
5 Q; O6 Z3 |8 G' B9 m, o9 K- r printf("The last one is NO:%d\n",*p);
+ V9 y E8 i* P, p) |% B4 G3 a getch();
' F) v4 C) @9 q2 Y k4 X3 Z7 V/ I" ?7 u
} |
|