|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
& w& ?, K1 j# h; l这几天我在忙着编一个问题,我用了一种方法编出来!2 d; p) J% b4 X
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
3 Y' ?9 O# d, g( H) f注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
q; |" h. u5 o; q. E, `4 P
/ p6 H2 p* l" i% H5 Y' D8 w2 H) A: ~
题目
t- a; z$ [1 ? J2 X0 b1 ^山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。; n) d& i3 Z& O& U
第一种方法:利用循环链表, Y! l& L- U' t9 Z5 a8 Q4 `+ s' E
#include<stdio.h>( t) w9 z, z& F" `
#include<malloc.h>
0 f a7 |' _4 R8 U/ f* m0 n6 |#define M 8 //共有8只猴子% v# _ k1 P: ^1 n! [
#define N 3 //数到3只时退出第三只
3 n3 P# G( ]; u% x+ x7 _typedef struct monkey3 V- P. v& x) y& o" f
{int number;0 a/ {1 @& |7 B
int flag;
& I0 ~' T a g/ [, w* n9 p3 lstruct monkey* next;* l+ J+ \/ z( m
}MONKEY;) {: u- S( a' x; ?
main()2 t: c" {( t: y3 L' T3 ~+ `
{ MONKEY *head=NULL,*p,*s;2 o3 i9 [) H, x L# `* J* p
int i,sum=0,count=0;
) a: K5 G+ V2 K9 s' ?$ I% X! r clrscr(); //清屏, ^/ Q3 V6 j2 z+ y/ P1 D
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存1 d B) Z, g( y* `2 s% L# o
p->number=1;p->flag=1;
* H. w% m1 J1 d p->next=head;
- \" Q1 v, v% G3 g/ h head=p;
1 J1 L2 L; C" M! `+ l5 T for(i=2;i<=M;i++)4 e( Q( U% {8 t0 e! T0 X" l
{ s=(MONKEY *)malloc(sizeof(MONKEY));: {& w5 J/ ^ p% N5 O
s->number=i;s->flag=1;
) X* l2 ^; s! v2 F s->next=head;. F* I; W$ o/ h& z! B( v; q0 l
p->next=s;p=p->next;
# T! _8 x( [; j/ S4 a }
; m& t" r( y/ l# r9 S p=head;' z8 ]2 S# Y: Z; M' m
for(;;)
+ a( |2 ^% I2 I8 N# W l5 ^ ` {if(p->flag==1)
2 h5 W! O* c9 p count++;, F, j1 u9 f7 e& {0 Z
if(count==N)" ^& ]* _) ~- ^: {* ? Z. Y
{p->flag=0;$ e' h& c6 k$ \0 s* w$ O
count=0;% F2 x6 r, q" K
sum++;}6 l( b5 a" w, n6 Y2 C1 s% L
if(sum==M-1)
3 [) \# U, @, ?$ c break;! O' o9 w' i' Y
p=p->next;6 s, u& w, @& N( K. |3 R( _) V
}
2 @9 ^5 x) e: E, w$ Q, v p=
- d7 d4 s% o5 t6 p0 ?1 Z4 g4 B) H head;
, f# c, n' n# e2 }5 P, D9 Q for(i=1;i<=M;i++)1 b: C/ j: x' S/ `7 _
{ if(p->flag==1)) y6 s+ z4 L( ~* O5 S7 Y' x* W9 `
printf("\t%d",p->number);
4 d# ~8 w" L k' O. } p=p->next;( X q( n0 D/ u; x
}
# P; k. T- i* o, ]- S+ q. B# w+ z: S( l* v$ o8 t
$ m# U' ?) `0 B! {8 q( F# z) J: I6 r3 |
}
# a1 Z, F F/ R9 B7 r1 @7 L2 I/ V第二种方法:数组( Q& ~) w7 d% |
#include<stdio.h>) A. H: Q. N) ~1 z, s$ G- r
#define M 8! m8 ]! {6 M) N) Y. @
struct monkey% K. m9 r9 c% |% k b
{int number; | i% n& r1 m$ _
int nextp;
: ^0 u- F) K. J5 K}link[M+1];
- e. a4 {4 f1 j; V" T% ^+ n
5 T% }: d% S8 a6 R p* X, rvoid main()+ `- T# d$ G% a6 N: ] ~/ i2 L! R2 ]( J- m
{int i,count,h;
; P1 ^ L' h% F) c" @4 y" ufor(i=1;i<=M;i++)3 g; |" S. p- \7 X
{ if(i==M)
. ^5 G4 y/ n4 f link[i].nextp=1;0 J) e$ v- _$ q9 m1 v" H
else( n) T3 K& f& ?% a% e8 \' F
link[i].nextp=i+1;, D/ r/ w: c# x, u D
link[i].number=i;# i9 Z( J/ n5 B: v) C' A
}
! G b. U1 } q8 iprintf("\n");
7 s0 L$ b$ i! u1 R. Ocount=0;1 I0 W3 o" X+ z' A
h=M;! w1 L* B( f& s) X
printf("依次退出的猴子: \n");
/ D3 M7 ~& q# m5 z% B0 awhile(count<M-1)
' y6 ~3 U) T6 G9 _; ^{i=0;
6 P+ f% d4 a, s( |while(i!=3)
6 X" q% s$ {; h& x. K. ?6 ~4 ?{ h=link[h].nextp;; E9 \' [2 h# e( C$ @
if(link[h].number)
6 v" _: n5 j! R! b) n i++;}+ \, @( X9 R- r% o& _7 N2 T
& L6 j0 L: C# Q; V8 a8 I2 A
printf("%4d",link[h].number);3 ^4 K% h8 T, t& ]% Q3 _
link[h].number=0; Y4 q! o0 D- I3 w( p# m: ]
count++;
+ u a9 A4 [) @# A$ i}2 S4 {) g6 g% d) l: _8 Z% R7 @. O
# b: R" \# l, D" I. V) dprintf("\n大王是:"); X" B, H% d. ?' f" p& q$ u8 a8 |
for(i=1;i<=M;i++)
& O* k* [8 o" y$ r ^ if(link[i].number)
, s8 w. m$ [" D/ V. j! K9 x, W: M7 [ printf("%3d\n",link[i].number);
( A8 n d5 t$ Y; ~8 W5 K( D7 n; c5 w( b
# H7 Q5 h% l. @
} 3 B" O3 H4 C9 S
第三种是普通方法for循环
! s% T8 W6 i1 k' |3 d#include<stdio.h>2 g! h3 h% C3 x
void main()
/ u5 }# k/ M* }+ \{ int i,k,m,n,num[50],q,*p;6 b5 I! h: c/ L
clrscr();' _- l! w% [1 v
printf("input number of person: n=");0 Y0 K/ q! S: T; `/ U! p
scanf("%d",&n);' G; y" m* r, } K
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
9 w( n+ g% b) _ scanf("%d",&q);* i/ N! Q: ?7 x# t. W* p% q1 L
p=num;
8 R7 s7 X9 _# W# O4 {5 d for(i=0;i<n;i++)* V* |0 E% d7 j
*(p+i)=i+1;( K3 ~6 \9 K5 F3 ~% l1 c
i=0;' ^& P* a: o/ d* r1 B
k=0;+ ~6 l7 N- Z2 _# H) J: S& e
m=0;
! }2 q! `# A4 B5 g% Q6 T. s while(m<n-1)
! e" Z* b5 f5 Y2 v6 O3 ^ {if(*(p+i)!=0) k++;
5 L8 i$ I" n; \0 s& y5 Y if(k==q)% {. ?9 Y8 k K) {
{ *(p+i)=0;. V; h$ R9 r1 V- f1 _9 l% O
k=0;: I3 F8 C! s# g1 n0 m# c
m++;
$ |# y2 {# t' u5 f+ N& f5 H. m; } }
8 C2 P9 r, N, M& e: y% c i++;
' S; T- P8 {8 ~' B5 T6 [: f4 r if(i==n)i=0;
2 t' u9 r. Y2 l9 R9 ^2 B }
& y0 V6 k/ y8 ] m while(*p==0)p++;3 n8 H% a" s4 d
printf("The last one is NO:%d\n",*p);* i K: y) s8 M2 o
getch();9 @6 |" V2 Q, h& E
, c1 w8 k/ O0 }} |
|