|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!* [" H( I0 G1 x3 ~3 f
这几天我在忙着编一个问题,我用了一种方法编出来!
) g- l \5 y, t1 I: z) ]但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
# j3 K. n! |: ?" q注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
8 d" V4 y& _- H3 U* I; L) _ Z* Y7 A q1 F) @7 g
% Q. X9 X O( y( N; M
题目* R% } f! ~6 F. E4 v1 J
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
6 V/ t: w c7 p; L+ e第一种方法:利用循环链表
, P$ n B9 z5 m#include<stdio.h>
3 O e9 |) |0 G1 v, k0 C#include<malloc.h>
# p( @% Q6 y+ q( E5 e. P$ w* [9 \#define M 8 //共有8只猴子
4 h8 p0 ?$ H& Q" y R# c; d9 o#define N 3 //数到3只时退出第三只, X0 z4 x. x6 W8 ?) s0 U# ~
typedef struct monkey
. g: l; y6 t! R% }& y9 l. K0 @{int number;8 m# l1 F: ]0 g% z5 g2 b- I
int flag;
( M) a# Q6 n: s+ P" bstruct monkey* next;) l6 X9 u! t( m# P. Y
}MONKEY;
9 S/ H3 p( z! ?& j5 l+ a6 s7 G0 jmain()& Q: L% p9 r7 R O. C8 ~$ o
{ MONKEY *head=NULL,*p,*s;0 X& L. ?7 f% X$ z6 j
int i,sum=0,count=0; p, ?4 d# f6 F5 U: o
clrscr(); //清屏
: Y3 Z5 R1 y% T p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
( m+ y$ p5 s2 p4 K3 P p->number=1;p->flag=1;6 Z; \" W/ B O, _ E! P5 d( j
p->next=head;
( U J$ ?% W" X: t5 O; X head=p;
- N6 B) H( R: c- Q" Q$ u6 i for(i=2;i<=M;i++)
. A5 ]$ D. q; y, a8 v* w; d { s=(MONKEY *)malloc(sizeof(MONKEY));
( G2 p d9 {2 f+ P* o8 ~2 u s->number=i;s->flag=1;& x* L M) f3 I& c: V. a) ?
s->next=head;
, t) g+ I3 P' E9 o& R p->next=s;p=p->next;
5 x3 M$ {, L0 j; F }, B9 p# @' N4 x. {/ {3 _9 V1 A
p=head;
- v$ ~* W* ^' E- n7 J3 q3 E for(;;)
3 C1 W" g! r! | {if(p->flag==1)
6 H0 p& e! \9 k; r3 ?! f) D count++;
* R- e( a! O! g$ d! A- d if(count==N)
8 T0 c7 ~: r/ V/ V0 ~ {p->flag=0;( z7 A+ Q3 z+ k- {" e# S
count=0;6 {$ b+ B* a- m8 ~
sum++;}3 ^$ P5 [9 b' `) X5 ?/ g! D
if(sum==M-1)
" B! K! f/ I- V9 N break;
% _/ N% J/ p; J1 t+ y* y3 V7 H8 s p=p->next;0 ~: E$ Y2 P# q8 ]
}
0 O2 w% `, U& n- n% l: ]% _ p=
+ x x+ W# n& }! m head;8 R8 {8 E( Z9 F# c; O0 H7 z9 Z& m3 ^5 i" i
for(i=1;i<=M;i++), @3 H5 p9 }% `# N& E* e$ o
{ if(p->flag==1)
: e6 \8 k- ^+ E7 u; u( B6 A$ P printf("\t%d",p->number);
& f3 `- I( c+ C. e- F% ^ p=p->next;
) n* W" E7 W8 f/ [2 x }
7 h$ P1 G# g& d$ G6 h4 d$ Y2 H: E" C6 e1 }
7 S7 b( ?5 g* V/ B) o6 V+ N8 ^1 g
( x8 g. j$ b$ K} ) L8 }4 g$ V& V1 R8 `( m O8 K
第二种方法:数组
9 _0 y% a" z) f" E2 i$ r4 R#include<stdio.h>9 m4 A, q4 S9 h* L) q
#define M 8
/ r" w7 S. i5 d! A% y: ~$ wstruct monkey
- J' I0 I) m6 w& s3 @4 _{int number;
9 x5 O/ B0 U8 i+ Z: lint nextp;
- P% @8 f: H k& W8 F' _0 `}link[M+1];; J, A* V+ G# E# p% ]; R6 ~
V+ ]/ ]0 g: n Z; i
void main(). p- ?* L. ]6 w4 D
{int i,count,h;) ~* O& l# y1 ~8 e: p" Z) K8 k
for(i=1;i<=M;i++)5 F3 K: B8 ^" j. S
{ if(i==M)7 d3 j4 d! O {7 S) {, c0 w
link[i].nextp=1;
e# N. P% m f& m else
0 ?! f- r) _( Y link[i].nextp=i+1;' m* M' D4 \9 N! p4 N7 Y, ^9 E5 M1 |# {
link[i].number=i;" O3 h/ t1 Z9 r! H" ~' v' Z9 m
}# m; K/ x+ Q. V
printf("\n");5 F7 ^: _9 m; F3 n! f
count=0;
! `$ D9 z/ O/ o) ?3 yh=M;; K [ n& a/ A& f$ ?
printf("依次退出的猴子: \n");; [+ k- N W- b
while(count<M-1)
4 a! A& W8 d9 B( B1 s4 p' b{i=0;+ m9 Q- n" \5 b: N4 |' K4 S
while(i!=3), v3 N @9 ]+ u7 |" |" ^) O
{ h=link[h].nextp;. W: ~' o) |) Z
if(link[h].number)
9 i: g3 I. P4 j& f1 h i++;}
. }% W% k4 f/ E9 [& `6 |3 K+ U+ l& E/ O( h3 f
printf("%4d",link[h].number);
8 v2 O1 K9 n$ E: s. wlink[h].number=0;( @9 g; c, u6 }% K
count++;; t( {1 v7 g$ a# f `3 @& B; p7 W, ^
}
7 o3 z: B' L* ]0 o$ Y6 g e9 Q9 I7 J& X: _
printf("\n大王是:");
5 y" [( s' T7 C6 v for(i=1;i<=M;i++): M, R* ^3 V7 H0 H W; l: g
if(link[i].number)- _: V; }6 N; f$ h
printf("%3d\n",link[i].number);/ k( C/ n% e) U
# r. }( M2 o7 d% G q2 H; }( \% y( i' R6 d0 R9 P _9 f
}
$ ~" g5 l7 `) V/ T# \: g# @* v3 F第三种是普通方法for循环
+ W- h' k: ~! g#include<stdio.h>
+ Y& O% ~* R2 s1 y3 N. \" R+ m# jvoid main(). L2 L) ~. O( o5 V3 Q2 u+ Z3 f
{ int i,k,m,n,num[50],q,*p;9 L# e# }' v6 h
clrscr();
- B% Z. K+ A3 v* y7 r printf("input number of person: n=");
5 b1 @( i% ~% d% t4 a scanf("%d",&n);
) t- V" k8 I b- t" P( q/ k6 Dprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只5 P( h0 m- M" R+ C0 o! F( {
scanf("%d",&q);5 L' U: r( S G ?0 U; l
p=num;) @; f- v5 B( k; N: n3 \1 |9 ]4 S
for(i=0;i<n;i++)
3 Q) f" M( [0 e+ ~ *(p+i)=i+1;( n( s6 a4 I! U! k3 B0 M. K
i=0;+ M* m* X( G7 p7 |
k=0;( I$ h; G. W' U; C# t
m=0;
/ T. g" {) O9 s while(m<n-1)5 Q) B+ I1 g- V" I. ]7 t5 J6 r
{if(*(p+i)!=0) k++;
t( H3 K; n, b0 x1 k if(k==q)' P; `, n5 q0 F4 l1 Y
{ *(p+i)=0;
% _) q E1 r2 r3 U# C k=0;3 y8 H! s- W1 X0 W$ E; F) j
m++;
4 R% q& l2 s, Z }
{, X% F! Y+ N1 K; H/ o i++;( Y9 o- i$ }: e" y
if(i==n)i=0;
6 L4 }, W. X A# C+ e }. O! c3 x/ [1 T& r: \! ?, ~, I
while(*p==0)p++;
2 m! B: o( O( e' d printf("The last one is NO:%d\n",*p);; I) @( |8 ^2 w5 }3 E0 Q5 ?" O) e
getch();( k+ U9 ~1 W: ^5 w8 l9 z
$ E/ q j2 Y7 M, Q9 {" x9 G: b
} |
|