|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!! x4 e% i' l( n5 m& |% ]* V
这几天我在忙着编一个问题,我用了一种方法编出来!
. M z4 T1 q. ]3 C* H' h# A但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
- l$ y0 U6 C. R) l注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 & H0 o" x4 R' Z4 O
& V2 ^6 z' h+ B# r8 s. P
. q8 q3 E: |( y$ Z0 f, _3 J6 l 题目
6 h7 q0 E [" k# X/ [( r, h山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
* Z- |: q( \* Z; @8 t6 C' T第一种方法:利用循环链表
5 J* W6 J" n/ R' B# R#include<stdio.h>
* H# w0 b2 r' F2 w$ M: n s#include<malloc.h>
5 v* C% s0 _8 s" |2 j#define M 8 //共有8只猴子
4 A* v$ {/ Q9 H' g* o% ?. [#define N 3 //数到3只时退出第三只& L* n! ?( ], _- m
typedef struct monkey' m1 K9 a0 }0 p% z
{int number;
1 D9 o# g1 V* U9 z. Sint flag;. y2 }/ {3 e+ K4 r9 X
struct monkey* next;3 I, h. H \6 q( [& _- f) v
}MONKEY;( }: A9 [0 k# w/ c7 J+ z" K
main()
& ~ H' T) X; g: q2 d& P$ X! \7 X9 D{ MONKEY *head=NULL,*p,*s;1 H9 N( `- Z; v5 }# Y4 j
int i,sum=0,count=0;- J1 u7 G/ l* s" }- U: X) k
clrscr(); //清屏
+ o, z9 j! [/ g. H# n p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
; Q/ x1 v: |; {. a# X( w' Y p->number=1;p->flag=1;9 v# T8 D" ]0 k8 ^7 \ M
p->next=head;
8 {9 Q) }/ [1 f, ?4 n/ H7 ? head=p;1 l( y- h4 ^$ {- v# D Q9 ]
for(i=2;i<=M;i++)9 B6 t9 a( K$ H6 h# B# Z+ _& i' k
{ s=(MONKEY *)malloc(sizeof(MONKEY));$ v0 Y1 x: f6 ~* F
s->number=i;s->flag=1;' l: e( ~7 [/ ~% w
s->next=head;
- j4 H6 D, d0 Y p->next=s;p=p->next;
+ q! l+ t: F! d7 e }3 B, n% u* z) ?2 H8 G! |( F$ i
p=head;
1 u7 a5 }7 _ k' t' H7 V for(;;) s9 J" d' h+ {2 A
{if(p->flag==1) s# z z. ?3 [2 J
count++;
( M- n8 v. e* r if(count==N)" s+ j( G# l# G/ x) a7 M
{p->flag=0;
" V" A7 H6 A( R- a9 u- ^$ ]: B: c: v. M- l count=0;
! u. |5 _# |) ~5 _% @2 S" H sum++;}2 O) `$ S- ~) N7 o9 h
if(sum==M-1)9 o' P" l* K* I) x9 S# j
break;
4 A! m- z( K/ T+ G) O p=p->next;
/ C2 [6 D0 G( H& u8 f1 u }; L" p& e% U* ]8 T! `' g2 Z1 y
p=
( b" s- P$ u1 a+ N# { head;/ o6 c$ j8 |4 v) H6 o0 { D6 R
for(i=1;i<=M;i++): J, L) O7 c; Z9 l
{ if(p->flag==1)! @4 P; Q( M2 w5 S( @4 Z; J
printf("\t%d",p->number);
5 u4 \- i+ k5 V9 ^) |! q. { p=p->next;- w! C) a& `/ |& [; s3 e
}
. v* r, t( j& ~: w7 `+ p E4 |" f! G9 M3 n9 f9 `
" N- a8 l- `4 U5 j8 l4 g
% O3 E8 N: {5 r! D; D
} 1 H5 x F5 z5 h4 U @, Y
第二种方法:数组) {$ p, }1 S, b! W& g! `! N
#include<stdio.h>7 j: R2 V# [) E9 D+ \( o3 w& y
#define M 8
9 e) {( ^/ L( |( J- o1 Nstruct monkey
6 I* T4 ~! Y# d{int number;' ~1 ^% w9 n% s5 Z
int nextp;
, i, u& o0 F6 ~' u: N, L, n}link[M+1];
' b/ s4 y* f! L m" r" _1 Q/ X
" Y7 l2 q6 v' Mvoid main()5 v8 G" h0 M1 h# A+ b
{int i,count,h;
- L$ _& ]; f% z1 L0 mfor(i=1;i<=M;i++)& K$ Z3 W! q5 q5 h$ s) O
{ if(i==M)5 w* p- M6 x# O& D0 H7 u1 s% `
link[i].nextp=1;8 {( ^# e/ |. k1 d1 a4 {4 e$ C7 h
else' t; H! B4 m3 F% d. i
link[i].nextp=i+1;5 \4 a" U9 l+ X4 E; O9 P% n
link[i].number=i;0 R6 Q9 }& }1 X, f6 Y3 ~) D
}6 v" F; \& e6 t
printf("\n");
6 k8 [( I5 ~$ N. _* tcount=0;
" r4 h# F# ], K! `/ ^ K" o6 |( o7 K, M7 fh=M;
" L9 `5 {/ k1 |. Q% x- H+ C4 Bprintf("依次退出的猴子: \n");
- b/ q$ S- d$ P0 N1 Z1 P X% i ~while(count<M-1)
9 P9 U5 l# F1 E: d3 l6 T{i=0;0 J- O" }* k1 H$ a1 S. G
while(i!=3)- o4 v& ^- G: M! x) ^9 R- j
{ h=link[h].nextp;
, d9 E. @( D. r; j; X4 k- g. j# M4 e if(link[h].number)
) F- R( c0 |% L- O: O, f3 `' o i++;}+ A" h9 i; Q2 s( P2 R; I' n
: `5 b- u" t$ w8 l
printf("%4d",link[h].number);& ~( |7 t& R+ e( m
link[h].number=0;( O# ^, l( w. Z* ?# X, `+ e
count++;
2 E. i" j& b$ p8 V! @; f6 ~. }}
5 X7 Z2 ]3 O' Y% x$ _
! c6 l' t) ]. b1 E q" V$ tprintf("\n大王是:");( {0 P$ U9 R0 V
for(i=1;i<=M;i++)
3 i/ y, n% f3 M6 s1 [0 }; E$ h if(link[i].number)& y6 o2 [, M- ?5 Q' @% F& O8 V% j% H
printf("%3d\n",link[i].number);
1 B* A v3 X' y; Q7 d. p/ s" q: n0 L& l* d
# H7 G: [! _' h) |& C}
1 T$ z+ _9 p$ d. k% z, U+ E& B, x$ I第三种是普通方法for循环2 E _2 S( T7 Z/ A/ K0 u
#include<stdio.h>
0 |0 _( u A- p( N c; Y. kvoid main()2 ~/ u& l* W/ }5 J) F h8 L
{ int i,k,m,n,num[50],q,*p;
9 w. j( ^" Z3 \5 o/ X' j8 B9 q clrscr(); S8 t' Z" g3 \# O
printf("input number of person: n=");/ M, h: w1 S7 r* _: ^+ H8 X! v0 Y
scanf("%d",&n);
$ }' [4 r4 k3 p0 j' a& K' Q L; ]printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
9 _8 R8 D5 N. ^ scanf("%d",&q);# X0 l, g6 f; ]7 v) Z( p
p=num;
7 b/ R- c) a# }, R9 v/ q for(i=0;i<n;i++)) H8 ^- ~0 Z$ ^- w6 @! v
*(p+i)=i+1;5 }" Q8 m: O9 X
i=0;/ O0 M3 I& J3 h6 o$ g6 l
k=0;
5 v8 n) |7 e+ \2 t m=0;8 }3 B* K0 v$ k0 s% r
while(m<n-1)0 `" r/ C9 T7 n" l( w
{if(*(p+i)!=0) k++;
. F- } Y) P4 h if(k==q)
, i" r1 i- j! f/ x. B, ] { *(p+i)=0;' w. E5 b# W( o! _' ]0 H' O( s
k=0;
* u; y1 F& ^; i m++;& T9 q$ j" ^% v$ @+ A. b$ R
}# T% F! {$ Y: o$ F6 e
i++;5 X4 O/ ]5 d [* s8 A3 _0 J
if(i==n)i=0;$ W+ b. d( U# n! @6 h/ a% c8 p
}
! b* w# p. i/ V r$ K0 c5 P while(*p==0)p++;$ \* A9 U9 y8 [3 E, q% y: v
printf("The last one is NO:%d\n",*p);
# I- l0 ]. v0 `1 n! \+ R2 e getch();% O% Z3 F- }: k3 t; V0 v A$ z: E
% m: u: W5 @" Y( a! f0 G. e} |
|