|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!& p2 x0 o% ^, a/ t7 C
这几天我在忙着编一个问题,我用了一种方法编出来!
, I: |7 j. H% p) n% }但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!6 y4 T V+ L4 U' ~4 ^
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 * K# _* F% A3 \9 a5 F3 k
4 g( o/ n% H7 Y4 |. {/ [- O6 n! m5 @
" |0 o% i2 s6 b
题目6 T5 J$ Q* x* Q }; K! E
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。: k* @9 u6 C! e) o/ M$ N5 E5 v
第一种方法:利用循环链表. O1 a, A$ v+ `! l9 n3 C8 [( [
#include<stdio.h>
4 X# Q: X0 o$ R* P( \#include<malloc.h>
" Y! j J! m( Z6 | T" x" u#define M 8 //共有8只猴子2 j& ^6 m* Q5 F! \
#define N 3 //数到3只时退出第三只
2 O1 h1 m9 a( w& r: @0 c ptypedef struct monkey
2 B5 e- [" r* n& F6 |, b{int number;. b$ \ ^* s- K; ]- S
int flag;
2 b% F: n0 ?' |& f; Q. w. ^struct monkey* next;
6 E2 n2 L* C6 P% I/ J) ]$ Y: n}MONKEY;, U/ p! k9 N2 h0 a* O$ M4 b. U
main()
; X' o2 P9 v2 H% d{ MONKEY *head=NULL,*p,*s;: ?( i9 i0 c+ o. N4 N' ~
int i,sum=0,count=0;3 W) t1 s( n8 G& J# R/ [; {5 D/ Q
clrscr(); //清屏, g6 m8 P1 ], i) z
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
7 @$ X0 J, \) s5 D; v* V+ ~1 c" t p->number=1;p->flag=1;' T; \% @3 `1 E" Z
p->next=head;. k1 k3 L. ~% \6 B
head=p;
; \+ R v( t! C* c for(i=2;i<=M;i++)) [- Q6 k: K, B$ I
{ s=(MONKEY *)malloc(sizeof(MONKEY));6 _! q3 _& g2 g7 R1 ]) @/ |
s->number=i;s->flag=1;
. @1 U. M7 Y" F* \9 J% L s->next=head;; E+ e: I9 ~6 O& \
p->next=s;p=p->next;
& y! N4 E% M3 T- Z$ q) h }
+ e2 H) M3 D" m5 w2 O9 w4 X p=head;( v% n& X5 N/ F2 t7 {. o
for(;;): ?9 g' |( A8 u
{if(p->flag==1)
1 {3 ]8 I, t& G2 N4 ~ { count++;
) n9 e. m, J5 c/ C7 y) [8 S if(count==N)
5 H, U- }, \( P( B' x {p->flag=0;& [% d- D4 X! X, S' c
count=0;
' Y$ l1 Z% ~5 m U sum++;}
0 R4 c" a7 i+ k2 c if(sum==M-1)
0 Q: V3 q# Q8 C1 M5 W. d) } break;, ^+ O8 _" ]: [7 n
p=p->next;0 v) A* a0 x; U6 k7 A
} d! o6 L8 H2 V
p=+ j0 Y% {" R; X( b' F( w$ A
head;2 M0 A7 ? l5 w9 L
for(i=1;i<=M;i++) i- M$ T! p: M4 Q6 h1 t
{ if(p->flag==1)
, p5 G) l+ v( v4 L( }- V printf("\t%d",p->number);
, p W+ s; U! n: ` p=p->next;, I# \! a2 S8 r1 H1 w
}% G, r* t/ \$ {5 H' T
5 l8 R9 e" I3 c3 i% H
; o- [ X& r# Q. D, D5 |
! D1 H/ J& R: a B: y2 {- z$ i% d
}
6 g& _# ~/ m& a1 B1 _8 s2 q第二种方法:数组
/ K* c0 `; H# u- [, Q; n% ?#include<stdio.h>( `& W" f1 e* k7 ~
#define M 8
& w g7 B8 u6 T/ J) zstruct monkey
$ b; F8 M5 P3 F{int number;
- L/ r5 K; x8 }; P, F+ E5 pint nextp;- v6 b9 ~: ?# w
}link[M+1];
6 O8 J& P4 q) x8 B$ d" M
* H) ? D4 V+ i; j' a0 Hvoid main()1 U' q% U* d* u1 s. [6 V" f
{int i,count,h;
" q: J F& \! p/ r1 `1 O7 m2 \" x4 Bfor(i=1;i<=M;i++)
4 L' V/ d* o+ G+ W" w' m{ if(i==M)
. I2 J: p* g1 O. M2 a link[i].nextp=1;
1 S" O+ L* w; i6 R0 f7 ^ else
" W0 d9 M$ a8 [2 w+ O2 k link[i].nextp=i+1;' b3 m- ?" ?+ u: N' b# K+ X
link[i].number=i;
; ] Y4 x& ^1 {0 N7 u; P5 J}
$ `0 T+ k, r# C, Lprintf("\n");
: P$ |) c* q9 a* |, wcount=0;
. } _+ g. i0 z( Jh=M;/ G$ b1 l7 ?* }6 V
printf("依次退出的猴子: \n");
$ O1 m" ]/ K2 t! mwhile(count<M-1)8 M0 N4 }0 _$ ]$ z
{i=0;
* b0 |- }2 n/ p. N% {3 \" |while(i!=3)# E4 p2 W' M) `+ Y
{ h=link[h].nextp;
. T( O$ `4 \* v4 Y: u) C% @% C if(link[h].number)
9 d$ b+ J3 ~/ _& o0 {9 v i++;}# T% h0 ]/ t1 P! A
6 a3 K5 Q- b0 X* D& H# |' v# ]6 x
printf("%4d",link[h].number);
2 s* c* M1 O( C& R2 blink[h].number=0;2 i* h& W7 V v- ~* ]6 \
count++;
+ A1 ]6 j0 l7 ~% C W}. d& h* x( T# y4 U
8 k3 O0 J2 {, }2 i, \0 B, b$ gprintf("\n大王是:"); \+ l- @, D+ x/ X% h
for(i=1;i<=M;i++)
: J) N% W( O% ^- ?% }7 E4 c: t if(link[i].number)5 u# M" z+ {' ]# B. d3 b4 |0 Y
printf("%3d\n",link[i].number);
" C7 h- x4 b& ~( S% O
. E W1 A7 m) u+ Y! q8 @' M# h" D! l, p% l
}
% W/ S+ V0 E7 Q+ P, u4 b第三种是普通方法for循环
6 I3 _0 m0 Z0 Z9 P7 x9 O#include<stdio.h>! p' q% z$ X" |, F l+ W
void main()
* w. o, ?( }6 S{ int i,k,m,n,num[50],q,*p;
2 \2 }: f/ H; t0 z! X% K clrscr();! f0 Q8 K. M% C5 o b# O
printf("input number of person: n=");, T1 r4 z" X1 D8 }6 s8 c
scanf("%d",&n);$ Z2 z) p7 ~ @, O7 W" `% U; w
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只& P a. I2 u( D6 r6 ^& j" d
scanf("%d",&q);8 u: z8 _7 d% f( Q
p=num;; ~% L' D( D& m; L, ^# b
for(i=0;i<n;i++)
! H5 e5 B! m0 j. i8 l& x* l *(p+i)=i+1;1 q: K+ C- E: T1 m. Y
i=0;
5 _- t) V: J, c k=0;% j; c- E' k3 w# G, A
m=0;
. I3 j/ v0 i ^6 z& D while(m<n-1)
: ?. y+ ^: g# P# n {if(*(p+i)!=0) k++;" ]. ^* K5 j0 c! b4 w
if(k==q)* K5 H( o! a' C! T7 i
{ *(p+i)=0;
8 a' p, C2 w; G: u/ w6 ]" F0 F+ }' H k=0;
2 S9 V2 ^. Y' ~" n m++;
. h6 P9 M1 c d6 v }7 l. K0 ?6 P! W$ r# H
i++;; S3 k& ? \% V. q
if(i==n)i=0;% b1 S$ E1 | a' x8 ~2 N4 p4 ~
}
3 q+ q+ D, c/ M; Y4 I6 ] while(*p==0)p++;9 S. s5 c3 L# }8 @% Q! U
printf("The last one is NO:%d\n",*p);& V0 K$ }' m$ [. e
getch();
" G& t' c. Y3 \, ~4 [, f
* `( f# K: G4 O5 c} |
|