|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!1 M" l, Y6 A, A+ \. |
这几天我在忙着编一个问题,我用了一种方法编出来!1 n* `4 D7 W) S& {7 a L. Z) Q
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
4 e3 H) O9 B* i& d1 @2 C注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
; W& w' ?/ [' `9 X/ a/ S, w) T( s+ N2 I6 ?, e
7 s5 d2 b3 g; C0 W8 G' c9 \' g
题目" g) _5 B& o* g" ^1 |
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。; R; I. E7 F: ?$ S6 g2 ^. x
第一种方法:利用循环链表
7 Y4 l- q1 R% U2 I: I#include<stdio.h>& D/ y: e- M" U0 T2 O: f! x
#include<malloc.h>4 R4 n/ o7 x# B, H
#define M 8 //共有8只猴子4 b* g5 p4 k: X, c* A
#define N 3 //数到3只时退出第三只
4 g* ^4 i* t$ f7 O% _typedef struct monkey% N" Z6 T( N" L, C: }- T
{int number;; P m1 ]$ d; L5 C
int flag;
0 a# Q9 ? q/ H- N+ ^struct monkey* next;/ s0 S2 r3 ]1 h5 A9 x0 t
}MONKEY;8 a1 m- A7 U" [7 G$ m0 S
main()
2 C( f7 S) ^+ D1 z% n{ MONKEY *head=NULL,*p,*s;
: T8 M* o. {4 z3 A; W int i,sum=0,count=0;
$ \( _4 M# I( P% D8 z5 x clrscr(); //清屏7 u; e# m z: O; ?
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存( F* J/ [# q& F* a7 N4 J1 N/ A
p->number=1;p->flag=1;
) X6 K7 L: G0 a6 @* l p->next=head;8 h- L. d( T7 i6 ^7 n% h9 M
head=p;% c6 X9 `& e& M2 G
for(i=2;i<=M;i++): Q+ l& G, Z8 ^3 _# w1 c
{ s=(MONKEY *)malloc(sizeof(MONKEY));& B! F) z) X: R! E
s->number=i;s->flag=1;3 v5 z0 P* S6 W
s->next=head;) [) e, d& E7 D5 ]' Y9 I
p->next=s;p=p->next;
7 z y* y" {3 G' R" y }
3 K4 w% O; ~: k/ O6 @& J% k2 O4 P p=head; M$ t( R5 o; t2 o5 y
for(;;)3 d m- Y: _3 b3 y! _* N6 ]0 y
{if(p->flag==1)
- {- Z8 ^) e: e/ e count++;9 Y5 i4 O. j# h) e" O8 }
if(count==N)9 i9 A @" i% V% }; X
{p->flag=0;/ N- j9 Q# N! o; b4 H
count=0;: ?- N! p4 e1 ?0 m* t) p
sum++;}+ U: G- {3 m8 b8 J9 r- N" m. \
if(sum==M-1)) p$ c8 Y3 x3 r# |6 g d, B
break;
5 r# S# n1 |1 \ p=p->next;) b' C' X, |( B
}
: t: i! |8 c% W, K6 G3 @ p=
8 V+ E# T6 u# g& L$ g5 ` head;
1 [0 O0 f8 g" c8 X- z* r3 q for(i=1;i<=M;i++)
4 z1 G4 k' {8 g4 c3 F# p { if(p->flag==1)! p4 n* W9 y4 A. l. Y+ n
printf("\t%d",p->number);
; R' {7 ^# o5 e" U/ C7 M# E p=p->next;+ `2 J" _3 K5 |$ b, G0 t, k
} }( z K7 o! A
3 D" x4 h# I! x" {6 n" V9 `1 ~* N3 _/ c! p" S5 i( l
- K$ F) \, v4 g
}
+ h6 B" L6 R0 ~0 y/ U' q第二种方法:数组0 u& I& k) Z; J8 d
#include<stdio.h>1 S, j+ ^! ^1 T, V! D
#define M 84 X4 G2 V$ o* { q4 L- }1 l* }
struct monkey
3 u! \5 _' L4 O7 \5 I& ~{int number;) ^* Q5 R* R4 o# ], Y
int nextp;
' A" n, X7 ]6 S; a# E u& ]}link[M+1];
1 f6 [6 p0 ?( `/ X
4 }# ]% h' w \- Dvoid main()* S$ E! n2 B0 W
{int i,count,h;
3 D" h8 J1 K0 W1 n5 S2 [ l2 cfor(i=1;i<=M;i++)8 c" T( y- v& b7 Z* S4 [" G
{ if(i==M)8 N% h; _5 M( |, F- K0 d5 d
link[i].nextp=1;
# X9 k4 Z; E) |- q6 X7 w else
7 J0 X9 O) Q6 Y; h3 Y& N link[i].nextp=i+1;% \2 w+ ?0 M+ O" O& x: b
link[i].number=i;
& o7 ]0 t1 H- e1 G" ]" v' E: t( t" n}
' p: \5 a' d+ R- Kprintf("\n");9 c* x# u) z" `0 v1 {
count=0;
, U/ j. }, ^5 G7 X( o! ah=M;
8 s! r& K3 q& e8 G6 q3 ^& sprintf("依次退出的猴子: \n");* A2 t1 o* F7 R, V' T
while(count<M-1)
7 W6 t+ H1 o5 T$ _, X: Q$ ~8 H{i=0;
7 V: k, x5 B1 F0 {while(i!=3)1 s5 g6 e3 \) s/ C+ q1 M" |
{ h=link[h].nextp;
! F }. v6 _- t+ F' C if(link[h].number)4 \- u9 j# N7 u4 l4 d3 S9 Z
i++;}
* ~, F& k; L. X0 q3 r- P. m& R9 D* K7 r& V1 P9 x5 ?
printf("%4d",link[h].number);
( x8 j- j' A+ M j9 q" ]* m T7 alink[h].number=0;
6 |4 \8 U& {5 }% V# i9 ^! tcount++;8 _5 D9 G$ s8 @3 u4 |6 }
}/ X- M9 x' C4 p3 W4 e
, z% ?6 v- u& s+ R
printf("\n大王是:");
# C' G2 Y, E" `( l6 M% D for(i=1;i<=M;i++)
7 s; v2 o$ I: j if(link[i].number)
9 m( A$ l. @* U2 z printf("%3d\n",link[i].number);
! S* c N4 [, O# K( P* P2 X. q* Y/ L6 Y& F' M$ ?: K
- X, M4 D7 i) _4 z1 N} 6 ^8 C& P! I2 \+ a# U! p
第三种是普通方法for循环
4 H7 S* @9 W; y% h#include<stdio.h>
* z9 V; j m. f+ ?+ v5 h* ~0 Pvoid main()' j0 F0 e- N3 j; D* U- X( E
{ int i,k,m,n,num[50],q,*p;, J$ f& o2 b9 z1 \# m1 q7 P* Z
clrscr();
# A) I. A+ }) r* C0 z4 R* ^ printf("input number of person: n=");+ d/ P }! q+ h4 l) _6 P
scanf("%d",&n);" B' f3 d s* C
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
+ f7 t& c9 G% Y/ y p scanf("%d",&q);
% `( K' ?3 }0 Q, c; O! {9 W- _ p=num;
; Y6 j0 F6 w9 ?- g! f for(i=0;i<n;i++)
' L! e3 V2 k h3 C) w q *(p+i)=i+1;
7 S0 T, c. B, w/ [3 Q/ T9 w i=0;
/ e; @! x8 S7 @/ c' U5 s k=0;3 `" H" l3 H5 z! c( c0 i3 w
m=0;
- C% h! P; j; c5 m) A3 t3 y while(m<n-1)
6 m4 W4 M! r a% c5 L7 B% R {if(*(p+i)!=0) k++;4 T' Z4 I9 F/ r' M3 v9 Q8 \ G/ _
if(k==q)# R. Z- X5 J6 ?: I
{ *(p+i)=0;
2 l5 ~( ^# k( }" C# b k=0;
: z" I* [! X1 w9 n1 L, D3 L4 x m++;
) J4 n. m3 ?: n* k! |9 [ }
# k }0 l, v4 v, U* {9 q- @ i++;9 u' y' b' Q7 V/ |- M
if(i==n)i=0;
# |" J. K! c* }; b" N }
6 |' Y$ K+ X9 l7 n while(*p==0)p++;
) x' ]( v4 V' C3 f" _$ I4 P* T" g7 K printf("The last one is NO:%d\n",*p);8 ~/ a# B% Z- | c: P
getch();# H: g8 m" ^( h: l' s* I
Q$ Y: f/ K) T+ u7 G4 A* u
} |
|