|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!1 v# C5 g' X6 B# i! v
这几天我在忙着编一个问题,我用了一种方法编出来!
D6 [$ E6 ^# J9 ^) ?# y2 [但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!6 K. A' T$ q( |% K7 L" v7 c( [* t
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
5 }3 ?1 V) J. z, b$ d- C; e- d+ n- @: w# n
% H! x; w- v- Y: | 题目" k$ v4 w. |- K2 v2 W
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
3 e% Z! E# W+ h第一种方法:利用循环链表
# b! F9 @% M+ N#include<stdio.h>
: A8 M/ f- Q/ v#include<malloc.h>
* ^; p. T) |; C1 @# a#define M 8 //共有8只猴子
, c8 e+ `; r1 u; [1 T#define N 3 //数到3只时退出第三只
. ]. d1 L* J; q/ C' E7 F/ ?typedef struct monkey
9 t' c* T+ e" O# a0 r& t{int number;
) U: D( u6 L( Sint flag;
# P. P, K7 Q% A% Cstruct monkey* next;
1 Y. C0 ^# [+ m1 \1 v}MONKEY;& y6 ?2 F, C0 M) x7 z
main()- Z7 j* G! y! K
{ MONKEY *head=NULL,*p,*s;
: @ \ I# W! ]7 k1 U- Q8 K int i,sum=0,count=0;* U$ T! b/ Y. ^3 h
clrscr(); //清屏
1 k$ y ]# ~4 a) x8 E+ A9 | p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
, i) T5 A$ o* y: E# J2 S2 S' {4 q; e0 V p->number=1;p->flag=1;1 l, U( B. {6 r2 U
p->next=head;7 }! Q4 B6 x* C+ {& t9 b2 V) ?+ G
head=p;
/ U: V6 B" o5 r- S/ C' d for(i=2;i<=M;i++)' }' a( u2 a- o/ p
{ s=(MONKEY *)malloc(sizeof(MONKEY));0 f4 ^; s% Q0 o! y8 u- V0 x+ T
s->number=i;s->flag=1;
% p5 C0 h2 r+ b9 B" U1 m s->next=head;
8 t6 M( L5 q0 J% d p->next=s;p=p->next;. L7 X0 U4 V/ T2 o2 k
}2 U; o* _+ H g
p=head;; \8 }7 B, N; f" o3 e
for(;;)
2 T$ J6 g/ \& D$ } {if(p->flag==1)" V( z$ V$ c% W! r
count++;
' t: |4 y" J# D$ H$ A/ r6 z1 k if(count==N)
6 `6 Q. v, c" S4 H {p->flag=0;
$ n3 d" f' A& w3 t& D3 m count=0;
8 o5 A" D8 k! v" ^- F/ o6 x sum++;}8 l. T$ v, r8 Y
if(sum==M-1)
8 d5 A: D; E7 U% X, v6 {# f break;
3 S5 A" J% q6 E3 ?9 ^" j: U. J p=p->next;$ O9 ^/ t/ G$ k7 B* m
}; m/ G Y2 B3 n3 ~4 p f2 ]2 O
p=
X z; Q' S( y1 y# G) q head;
2 y6 D% c' w) Q8 c for(i=1;i<=M;i++)
5 {) i% I- T+ F! ?3 v! @1 F { if(p->flag==1). d) f+ q6 j4 d, R( t+ g; v
printf("\t%d",p->number);/ }( [' b% R7 { m1 {
p=p->next;+ P9 f* w# `4 x& ]& h+ D* }2 O
}
# {6 g: m% `6 S, K1 P6 W' D" A( L; y1 z6 ]2 @, D) K7 t5 b4 C
( u$ p% S; o0 \! _
' i* z0 G; D4 K+ {* Y7 ?! I9 w R}
" b2 ?) g5 `0 f6 p; i第二种方法:数组
, z! O: g( P- o2 k6 r+ r#include<stdio.h>: Y2 \3 Z# g. k! c- L; f
#define M 8
) C4 d( K3 u( [& C7 ^/ Pstruct monkey
" x$ I( p6 N7 R/ t" F3 M{int number;
6 T- q; q: K( r! l# M: B. vint nextp;0 D3 m+ o0 i! i- f& W
}link[M+1];
& H9 }9 M% Q1 I3 O8 }/ J5 y! o: j: b" t* N6 `1 K, k: g4 T! W5 `0 W
void main()
% e; W& S+ E" |: y3 z{int i,count,h;+ f% W: F4 w* T, o. e# p
for(i=1;i<=M;i++); T+ R! H3 q9 i% u1 i0 o3 ]( e
{ if(i==M)2 M3 |) M9 e! T3 e: t
link[i].nextp=1;& Z; }+ y0 h) I+ R& K* m9 \% O
else- ^% U" m6 M! R8 G% d9 r0 ^ \3 f8 H
link[i].nextp=i+1;
0 g, o, z2 G- N5 N6 E5 w link[i].number=i;
# V, ~8 |1 y) u1 K% x7 I+ ^}( [# s# D4 P7 \4 B2 o# H& A
printf("\n");& U) Q8 p; e% _% x& ]
count=0;5 L5 ]; H9 Z1 G
h=M;
% t) x$ U& l; @printf("依次退出的猴子: \n");' [7 S4 a; {4 P/ v
while(count<M-1)" X8 x" d/ ~" {4 H. s1 y$ n
{i=0;, q. O1 s% k9 R4 n3 C
while(i!=3)2 J7 T' g) @9 f8 p
{ h=link[h].nextp;
$ ^. F; K8 E I) W7 R5 @ if(link[h].number)
5 K# u7 w6 ^; U. d7 k' }; Q+ s i++;}
4 f% O) i% C* w9 o' c3 Z
3 t4 H7 g/ H8 z- v! T: vprintf("%4d",link[h].number);
8 v# x" j- A$ V2 ^link[h].number=0;
& Q8 Q9 q E$ W5 Y8 Kcount++;0 \. A' M# M0 D( U6 u/ A( f" m# s
}2 B" {7 ?$ B5 k+ }, b/ W
& M0 d0 h& R# v7 ?& M% |9 A
printf("\n大王是:");0 L3 h7 T) O. g6 v& D& S4 ]
for(i=1;i<=M;i++)
- @7 k) w' C& ?" s4 | if(link[i].number)
: o, ?0 E3 ]5 l% z/ A printf("%3d\n",link[i].number);
& {9 \+ f) [4 i8 _$ f
! v. c$ V+ f, ?, u) B- X: R4 O6 t
; n# ^+ A7 ]( ^, @' D3 h4 J} * n* d$ h; J9 {5 _
第三种是普通方法for循环
" ?6 `/ Y$ I4 b8 M! u0 C/ ~#include<stdio.h>2 ^) [& H, I E' \# U2 L1 ~2 r
void main()
# J. {' o# [3 A2 Z; ^6 Y) U{ int i,k,m,n,num[50],q,*p;
! \, r5 R+ ^, k7 ]% B6 p. C. v clrscr();
e$ z0 S+ x. @* k; u printf("input number of person: n=");) k( J! \6 i2 d
scanf("%d",&n);% ^1 A" q$ v. ?. \" _4 E
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只0 C& K! N7 Z% c: ^
scanf("%d",&q);
# t- W6 t4 ?3 z0 @ p=num;& ~1 c+ v: P- [6 w( P) x( r3 y/ v" U
for(i=0;i<n;i++)
9 r0 M' l$ N& T* A* C# D *(p+i)=i+1;7 w' g5 n/ l! b/ V& N- p/ `3 q1 J
i=0;
# O g0 g1 m _5 o k=0;5 [ u5 o/ C' S3 ?9 R( A* e- o
m=0;
$ f; e1 J1 g! s2 {. @! q while(m<n-1)
$ I$ Q" ~+ i3 G9 ~" I+ }5 d& r* S {if(*(p+i)!=0) k++;% `" f3 h( [. E. R6 i
if(k==q)* o. H- u6 j' u' [% m5 |% p
{ *(p+i)=0;2 T" u ~4 Q2 y. u
k=0;
* e0 D# e! s0 f/ o8 o! E m++;" j& k( S0 T8 W$ n) y T
}
& g1 ` M- c# l. m i++;9 `) ^9 W0 C- o4 I9 |4 Y
if(i==n)i=0;
* D6 m+ z8 A5 C4 B; o3 D, h }" f0 m% V# i# A: d) A3 w; W
while(*p==0)p++;
0 J: C+ k6 ^: y8 I, j9 X printf("The last one is NO:%d\n",*p);9 e2 c* W% f( |# h( L9 {$ C5 n
getch();7 F* i, c) R7 C' Z' u6 l; v" v! T
; ^' X) W9 O1 v* m: u2 [9 |% B! M
} |
|