|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
2 E- x9 o2 i+ P1 h6 e5 R这几天我在忙着编一个问题,我用了一种方法编出来!* w. L7 ~/ g9 b4 C4 V5 A9 K
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!" U) { G2 S7 L& k: W
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
) M1 C7 Y7 H* o3 F# d6 n- p. ?) \. i' f+ V5 }
4 o$ g2 P* Y+ M G
题目/ f/ ?/ j* c7 F7 A( x5 {
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。8 C5 ^* p8 a2 z
第一种方法:利用循环链表
- g* T g6 `/ z% _#include<stdio.h> y! a; n7 a* v
#include<malloc.h>8 V/ G$ D8 W0 l
#define M 8 //共有8只猴子
- R1 g1 g/ }# b$ Q$ h) w4 v#define N 3 //数到3只时退出第三只
4 h; B, @; q* mtypedef struct monkey
3 L. a, [% F9 f$ n! S6 \" M{int number;/ _' i9 m7 c" | m
int flag;. F( M. G& m+ n' j, X
struct monkey* next;
1 F T2 n+ T: k}MONKEY;
! Q" l# Y$ y# \) ~main()
# c" s/ s. U Y" R{ MONKEY *head=NULL,*p,*s;# L, Q4 e# A3 T* N4 n! \" c( N% e% V
int i,sum=0,count=0;
]8 M! h1 p( `8 F: [ clrscr(); //清屏
; R2 C U' P$ o9 r p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
8 x1 e. I: [1 }! p8 _( l x% V p->number=1;p->flag=1;
3 e' u3 W0 K9 c- @& h% ~ p->next=head;7 M: V& P; i; o p' Y$ W
head=p;8 n; Y8 n/ T+ r" B5 X
for(i=2;i<=M;i++)
) S" h9 N. }$ `! L8 } { s=(MONKEY *)malloc(sizeof(MONKEY));+ i2 F# n2 G8 L- _
s->number=i;s->flag=1;
+ N8 g8 h) m: V' x( ^- b5 M S9 Y# F s->next=head;( g3 H5 R7 {) R. ~5 P0 t* T
p->next=s;p=p->next;& a" P! [ e. K; ~/ D: Z, z
}
* Z) `, |2 h- c0 m/ A3 q p=head;
7 Z7 A" ~" ]8 ^& \ for(;;)$ Q% c- u/ l' R- {
{if(p->flag==1)
+ ]& ^# ?7 u& O; w1 Z* d! } A6 L count++;( Q$ h: D& v" ?
if(count==N)
6 h% O6 O6 _7 W( D' i" e' k {p->flag=0;. E& t, x3 r% |# l4 r7 C+ m
count=0;' n0 ?9 S, V. a, j( F
sum++;}+ A- l& t- g/ R( h! M
if(sum==M-1)
6 @9 ?4 P6 p6 s. h/ h break; M, g6 w% {; @& H: `- }. D; p0 d$ M
p=p->next;/ j# |% w4 h; O$ X
}
7 A0 }( }3 g1 \* M9 N! l V p=
& n% p+ a5 @, C4 _ head;
- j8 k' u5 @; P( J for(i=1;i<=M;i++)2 L5 `5 `! Q6 C9 A J
{ if(p->flag==1)
, @9 J" p/ N7 l' h' s" B" r- N2 q printf("\t%d",p->number);/ g* s4 M0 z V" c; k$ `
p=p->next;
- b5 o% a& X2 K- l5 G& c }
- S6 N1 ?9 F. t8 [' a$ z) s+ F
b7 `- v9 A u4 S8 {
* {' B) B5 A/ O0 \6 p5 m5 h7 q+ x/ Z9 h2 L0 @# G9 N2 }5 T' K
} ) y# w0 O4 [; a0 ]: D5 l9 \$ Z
第二种方法:数组
+ s8 V) |7 j. L- V& Q7 r#include<stdio.h>
9 m1 n. [- `- m5 @$ |0 v' R0 O#define M 8
) h9 w5 M0 ^" t$ z- C/ f: @struct monkey, G# |5 G6 I9 K& ?, T6 j( G
{int number;& g. e% f$ g0 F0 y6 o
int nextp;% k+ _3 K1 e$ o2 C
}link[M+1];
7 H* T1 A2 T' p* ?3 w+ A+ N4 k5 T* ~: F+ ?# ^8 `6 k2 E l' n
void main()
! a% ^5 D. I! U t{int i,count,h;
3 S6 r) s: s0 rfor(i=1;i<=M;i++)
8 S' D* O7 K, {" y3 @) A{ if(i==M)
/ G, T, {1 E5 [; V0 H* |5 P link[i].nextp=1;5 h7 W+ K: L r0 E4 D! A
else( S. s. d+ N' l* ^% P# ]7 m
link[i].nextp=i+1;5 `5 |0 N- @; ~1 U" G4 ^6 D
link[i].number=i;
0 z9 H) F4 q9 K/ T4 N& S; U% j}0 O' `* j5 ], W2 k3 u6 T
printf("\n");7 Q+ {7 z/ l6 L( _4 }
count=0;. b% m' a# _2 D9 Y! S0 a
h=M;
" W* Z9 z. N' [( R7 qprintf("依次退出的猴子: \n");& v; Z7 ]1 q" a( `5 L7 c, z
while(count<M-1)
( m/ V" b/ d# j( y5 y6 Z; b{i=0;
: B+ r& P1 [, T+ F$ M; d, B8 lwhile(i!=3)$ a/ U4 S8 a, i, g/ A3 H8 F
{ h=link[h].nextp;1 U1 d& @$ a0 }$ L
if(link[h].number): k0 ^* h3 Y) h5 d$ m6 a$ e
i++;}
6 T8 }( M5 F4 d$ G
& p5 a5 R) m! O# o, H7 qprintf("%4d",link[h].number);. o# H+ \( m* @# T
link[h].number=0;
2 w4 K6 b# Y/ u) f1 v' T& lcount++;4 x2 L+ D7 I* r1 S. Z
}: R* r. ]. z6 p. X
0 ~$ T2 U0 a- Eprintf("\n大王是:");
1 W: B7 i! ?( r- Y1 |! D! `. k for(i=1;i<=M;i++). A* u$ ^/ E6 C; i- Z# r$ S* u
if(link[i].number)
0 B/ j- l! M7 y: @ printf("%3d\n",link[i].number);
; ?" S) h; ], d1 d; t/ y/ w9 H# p, f7 P
: d, T. h( P$ }1 j( M. M
}
3 \4 w6 B* t5 M" E第三种是普通方法for循环: ]) V5 A! M" }% O @. Y4 z/ r
#include<stdio.h>
$ s y5 v- P, i& T* P5 Evoid main()
/ B( p( m( f; c; ~7 g{ int i,k,m,n,num[50],q,*p;( @1 b) a4 Q. v2 ]! L$ I
clrscr();
# h ~" M7 e# w printf("input number of person: n=");4 G# C( D+ @% S) C% A
scanf("%d",&n);9 Y% F# ?, \# x& M; w; j
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只8 a, \! ^) F& g( {! M: d( C
scanf("%d",&q);9 z5 l9 d6 T& E6 ^ x1 X
p=num;
8 Y: P( K' j' v I6 }% f for(i=0;i<n;i++)
0 A/ h2 Y. {7 [ *(p+i)=i+1;
" X' K2 h3 s! f3 r% M i=0;4 T1 K- b. y4 `( p
k=0;, b' K% y5 X3 n) T' U _
m=0;
. B% w* \7 i; \+ [3 p$ O$ c while(m<n-1)3 r0 v# j: a+ Y8 L" `& T
{if(*(p+i)!=0) k++;% p, X: k3 Z4 z9 W) Z2 R/ I
if(k==q)
) ?2 L" d3 A& `0 C0 u. e; w { *(p+i)=0;8 O0 _* W9 o+ A3 Q" `
k=0;
2 S- G6 W% l! B Z m++;$ p @- y# b# m% \" d
}5 N& P/ g7 m) O' }
i++;1 X6 s( g5 h. L0 t8 m5 ~7 v& h
if(i==n)i=0;
P! @' P3 v1 V, V( l0 n }
* H+ I$ p- o$ U) Q; T" Q while(*p==0)p++;
; I1 q; _& H9 d9 |5 t printf("The last one is NO:%d\n",*p);( p) X& H- B5 q. j& Z$ m9 F8 o
getch();
# {- m3 h5 p y4 @3 o3 n9 Z M9 I6 k/ B% ~4 Z6 }
} |
|