|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
% f8 _6 | _0 N+ Z这几天我在忙着编一个问题,我用了一种方法编出来!
2 h& U9 y/ x& \9 L; M% }# A但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!$ v7 T2 g( `- G* X8 z0 B7 p4 Q
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 1 r4 j- |3 {2 `; y
4 J/ P' { B. {% H" M& M
; p+ o2 O' Y- H4 @' S
题目. v. K0 E+ A$ O; a
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。( x4 u- t% q6 @! d3 m2 `: N% ~& w
第一种方法:利用循环链表3 ~, s& I( Z+ [! S
#include<stdio.h>
+ G3 o- M3 i# B w#include<malloc.h>
& j6 B# [: }- X3 h& v4 Z#define M 8 //共有8只猴子; \5 P( w) B: R# G8 F: A, l& u+ O
#define N 3 //数到3只时退出第三只
6 k. k4 x b0 K3 F( o- O- G8 Ptypedef struct monkey1 {7 X7 d, a. A; N/ x0 Y1 f3 i$ k
{int number;+ x* o# O! v* b# {) i. M
int flag;" \; O6 X, ^1 p0 A
struct monkey* next;
" v9 m b( { ]# F1 n}MONKEY;
$ f! g& A( g, M' U& q1 X* x4 Z% imain()
6 r9 ]1 ~0 s& F# d( N{ MONKEY *head=NULL,*p,*s;
$ |: `1 U! f2 t" M7 W" y! i int i,sum=0,count=0;2 I0 x' i& E6 N; V
clrscr(); //清屏9 `7 O' l' D8 A$ d
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
4 ?! G O" O c2 h4 W! z6 V+ _$ R! q p->number=1;p->flag=1;
' L9 ^) G' {0 t( J& U/ H$ | p->next=head;
2 a- k; h7 I) L1 U4 J. c head=p;2 T8 H$ \4 o5 s9 l) {
for(i=2;i<=M;i++)6 Y3 R" z9 |0 M$ }, s7 [' i
{ s=(MONKEY *)malloc(sizeof(MONKEY));
b6 o' h L9 ]8 g s->number=i;s->flag=1;! c2 p! @) m, Z4 d6 `
s->next=head;0 P6 }8 p7 f: Z$ H" _
p->next=s;p=p->next;
4 Y" j8 o2 o% o; `% E }
7 H: ^& f% t9 y( u8 i9 N3 m6 _% y p=head;+ h( P3 y5 c/ D, o$ v
for(;;)' x+ S' Z4 P5 G5 g: C$ t
{if(p->flag==1)
- v9 |3 }0 p+ i1 p" |, e count++;
& @( @( M& H5 Q* F) m, {; ? if(count==N)2 F9 m# \4 S' m
{p->flag=0;
# l2 ^' K5 ^6 [( A$ n S3 @0 Y count=0;
6 a a2 M3 ~/ } sum++;}( s# {# e, X& M1 V2 y* U1 {
if(sum==M-1)
0 b2 [. S0 e( }0 ~7 Y break;
5 }+ W7 X6 Z4 G$ ^ p=p->next;
, v% c; g- U4 b/ G+ C# F }% K/ N/ z: q+ r
p=
6 H" t3 L5 }6 y2 G! ~" ?5 I head;
1 Q, o) y: P+ ~/ H+ M. w5 A+ b; i! e \ for(i=1;i<=M;i++)) X0 ?6 S3 L# l5 I6 v
{ if(p->flag==1)2 |) x+ h0 M8 E0 v
printf("\t%d",p->number);0 p4 [/ F/ a. ?1 j( R
p=p->next;
7 f# W! Y0 x. j# o }
1 F* \* H( Z; i+ b: D" j0 H$ g! Y6 k5 X
! C- Z* O/ V L9 q" f/ o) L% ?2 s8 @! |
}
- |$ U6 ?- x9 Z4 D0 m o' K$ Y第二种方法:数组8 S- V6 U4 o8 C, s7 s+ U O% q
#include<stdio.h>
9 t1 P9 R8 H2 i' u- n3 B5 p#define M 8
% f! x/ ]" M" @- Z# Z& Ystruct monkey
) i& b! ~, A/ c' Z/ O{int number;
! `2 e, c4 R1 ?, t/ bint nextp;! s% ^& l* r8 b7 Y% [9 e! {
}link[M+1];
7 D. s$ U( d* L* w/ ]7 V, E/ m5 r* q, V$ Q
void main()
* S* ^4 X% {$ F/ V1 B{int i,count,h;
+ H6 D2 S1 I8 |& r8 z0 B/ lfor(i=1;i<=M;i++)6 ~ ~8 d, m1 @' |4 v
{ if(i==M)# c# W o% g( Z4 ~
link[i].nextp=1;
9 D1 V: E. \/ S% k" j' r! ^. o else# I5 G6 S# M7 @" O. b+ E" g
link[i].nextp=i+1;$ }" |$ [; L* a P
link[i].number=i;
! S% [; l5 f' V: `" l: g}' s$ F* h4 Y* {
printf("\n"); Z6 ?0 e t" H( p. b6 [! N- N$ ?( @+ i
count=0;7 H0 j% @& I6 L3 N X
h=M;. o* i, ?% w- Z q
printf("依次退出的猴子: \n");, p# f& O1 _4 k. C
while(count<M-1)
2 d9 m* Q$ V1 O( F/ d# U{i=0;: {% S3 ]6 U7 r6 V" D
while(i!=3); p1 T* {4 P/ v# e" F# v/ |
{ h=link[h].nextp;* y$ W$ S8 U; K# Q [% F) n
if(link[h].number)) ]4 W% a' G% O/ w% s, @- W
i++;}
; G" U+ ?* T% \( j- V O
- ~9 S y8 D5 _, S! }7 Mprintf("%4d",link[h].number);/ g( F1 C# i+ R5 [: g) {' C+ P
link[h].number=0;
/ ^( s/ y5 d% x* Qcount++;
" S* @% D0 p5 ?}) v# I: [ \$ E' X" V" I
' B+ g7 T/ r& i. U# V8 g
printf("\n大王是:");' [# I. s# b0 w
for(i=1;i<=M;i++)
& V9 Q3 x; m+ q6 h; T! o/ F if(link[i].number)
) i. _6 P/ G+ \7 \% d- w6 Z; p0 b printf("%3d\n",link[i].number);
/ _) j; U4 _1 [
0 j7 b6 J) S& j; K" w: A7 a( W. S$ V5 Q! k, S7 J4 i
}
6 P+ H9 }# r2 O' H第三种是普通方法for循环; v' K; R4 k$ \
#include<stdio.h>
1 O/ W# e: r- ]0 H% o$ dvoid main()) @6 b4 M2 m; X4 T3 E. q
{ int i,k,m,n,num[50],q,*p;
' K! B3 }6 K1 _% _ Y8 T clrscr();
6 D5 A }6 g; d1 x, c printf("input number of person: n=");& R( c/ J- R1 [* @3 m
scanf("%d",&n);3 N2 N4 y, g7 M4 `
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只1 f1 b' Q, i+ b* `
scanf("%d",&q);" P4 O: K$ F0 a# S$ B
p=num;
! o) n: x3 X/ |8 f$ \" e for(i=0;i<n;i++)
% F4 N: x# c# `) ~3 d. C *(p+i)=i+1;
$ c3 U5 ~: M6 g) H6 I* S i=0;( b* p# g( h8 z- a0 M* W
k=0;' L- N/ n8 \' M- O7 [1 ^# k& a1 S7 I
m=0;# y- V0 A$ x @8 q: C, D
while(m<n-1)
1 ~( M0 v. l5 ? {if(*(p+i)!=0) k++;
5 u2 c0 s7 b P) ~1 S if(k==q)
f% N7 U* K9 n' u/ L% o- h3 f { *(p+i)=0;
: N( G1 ^) [- T' [9 J4 z, W k=0;8 L! q8 R% a8 d! k7 P' a A
m++;
0 v; s- K; r; U3 r }- a) T K x& Z# t# }, ~5 w( L a1 T, M* g
i++;
7 @, a( l( @8 `4 k2 G if(i==n)i=0;
3 Y: d9 k9 T6 {- d }9 r7 m0 |3 {9 o U& |
while(*p==0)p++;
& g1 a' a$ b$ D r# C printf("The last one is NO:%d\n",*p);6 j/ ~ c' L* d. ~, I7 l. B, [0 v
getch();
, E- W6 @; x& C3 Z. o! \1 I5 T; E7 P$ u) b' [& y
} |
|