|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!9 o4 T( G8 H& a: Y2 P, |: P
这几天我在忙着编一个问题,我用了一种方法编出来!3 A/ i* p1 y' r3 C
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
& t8 |$ _3 m- F2 U/ u$ c注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
9 R- E8 \. h0 o3 O6 `+ N
3 j- M6 W5 ^; c/ J* C& i( C. j3 _8 N
题目# z* L$ D4 t& w& d9 z. z6 w9 t
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
7 {& u- a8 j0 Z# }8 h, @第一种方法:利用循环链表
3 t8 J1 Z4 Q! A7 v#include<stdio.h>0 m: ?& o9 z1 ^9 h
#include<malloc.h>
2 z2 l" L5 b. _& p# c5 {#define M 8 //共有8只猴子
% g4 A% G& `5 ~9 [1 x#define N 3 //数到3只时退出第三只
5 q7 {# }8 C0 i ^2 vtypedef struct monkey
3 x, e; X7 t% Q$ G/ ^+ Y# J6 r1 X{int number;
* m6 F) F/ p1 a1 K" X( aint flag;6 F Q9 F0 x0 _# D# }
struct monkey* next;
2 g, ]* D3 \# C}MONKEY;
9 G: E+ S/ ~2 E9 T3 l# Z& y% t% p* f( Qmain()' B5 ]* a0 h- T- Y' B' ?4 {2 p7 n
{ MONKEY *head=NULL,*p,*s; i% _6 m- W2 _; J; o0 J+ [4 |
int i,sum=0,count=0;
4 V( N( k7 _. F1 R3 Z1 M$ m clrscr(); //清屏0 j3 A3 _2 l+ y# t0 I" `, e3 N
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
" D7 y' G* ?% M: B' b/ F p->number=1;p->flag=1;
6 Z' K4 k/ k9 A+ f3 j p->next=head;6 ]: x7 _/ {1 F* Q8 l; {3 g
head=p;
/ x2 R8 ?/ b/ J1 [2 P% R: r$ Q" o for(i=2;i<=M;i++)
7 r, Y w+ Y; l) e: t7 z- d/ _ { s=(MONKEY *)malloc(sizeof(MONKEY));
; G6 E9 G! k" S' A+ ^ s->number=i;s->flag=1;
* T6 A& f }* k0 c$ k! f; } s->next=head;& E1 h$ V! R/ a& Y* i
p->next=s;p=p->next;
' T: E6 K3 o x% U! f5 }; ~0 E, _" L }; t. D: d: v4 Y* o# w8 A
p=head;0 s X2 m7 j0 p6 e
for(;;)) }/ Y0 o: s7 W: V, N2 l
{if(p->flag==1)
# t5 |3 a# r5 M7 g4 l+ ~- k) a& F$ x' ? count++;
4 z; Z0 K7 |- w- f if(count==N)3 s+ g, i& S, n7 e
{p->flag=0;
8 F6 p H* p4 `: u% I* f count=0;1 R0 s! f9 a- H9 b1 D) B1 _
sum++;}0 x/ ^+ [! N5 Q5 Q8 @, _! ~
if(sum==M-1)+ q" D3 _& V2 K2 ?
break;
' G6 r0 \3 D# n$ L$ n$ ] p=p->next;
3 L$ P$ K% A' D7 l6 `% l }
' X* k! D; k0 X. i! P0 q p=
8 t1 p$ f- o# J- W head;
! Z) E& O. U: p u Z for(i=1;i<=M;i++)9 }! T+ w/ @# p, l! a, ^
{ if(p->flag==1)
) S2 E% @/ a$ }! f: c. c; y5 ] printf("\t%d",p->number);
* m# G" K. C; x6 ~ p=p->next;
$ ]" f/ \2 a" z }
& s6 p' v1 Z [% s* o- U2 ^4 s8 S- Y2 G ~
/ U( ?; v& ]' o/ E+ A
# y4 Q# ~8 N2 C}
( y1 g0 }" P7 |, C第二种方法:数组5 D i# U/ r! P! Q I
#include<stdio.h>- J- {9 W$ T" P' }( i1 G+ L3 u% b
#define M 8
7 m/ X) E* a; H7 O% pstruct monkey6 [% d3 J, {" G W( Z, z& d
{int number; Z" j7 N' i& |/ \+ E, p
int nextp;5 C$ H( v4 D4 `8 J
}link[M+1];
! L/ q' m* I7 \; Z; b/ S& t. `( J9 n: c H4 @ O/ k* {' H
void main()7 B+ z$ G$ M7 ~$ {
{int i,count,h;
& x# \- @, p& n. Ufor(i=1;i<=M;i++)
! E7 D7 |; J4 j% t @& n{ if(i==M)
8 ~' c8 l$ `& G7 G link[i].nextp=1;
$ L. B$ ]3 L$ q, \4 k else: b ]4 O, w# n# }* i
link[i].nextp=i+1;- _! T2 E7 D7 Z
link[i].number=i;$ L( N1 ~/ o$ h1 s2 N+ r, S/ C6 N
}
9 H$ |$ j6 T. [8 D# Z# Oprintf("\n");$ d. M' T3 f t% E( U. Q
count=0;
# I+ H/ {9 g" Z; w2 oh=M;; `& ^" q. C5 W X3 O
printf("依次退出的猴子: \n");4 X1 w. Y! z3 x3 O/ @) B+ Z: ~
while(count<M-1)
& l( ~* q- M6 d5 B- v# @5 v5 t{i=0;
2 f3 Q, S2 g& s3 twhile(i!=3)
6 u! s j; A9 o a( O. }# u1 q{ h=link[h].nextp;" n0 y5 a: y* V* x' ^/ E: R9 J
if(link[h].number)* }3 h* Y. _# V+ e' C. h; J; y: h/ y" ~6 K
i++;}
t I% ?1 c5 a! |8 Y: {* m% F; i- t3 _$ o3 s4 q: y+ P! i
printf("%4d",link[h].number); E. |7 ~8 [* X8 M
link[h].number=0;
8 }2 K! }8 w; n7 s- |9 f/ P; ]count++;
' u" r7 m' n ?6 u; {}1 G, p l; e8 D. w! A
* o; p$ D5 C+ u1 d& B
printf("\n大王是:");
) A) r z9 o; z( S& C/ K1 c+ ^ for(i=1;i<=M;i++)
9 s, g# l' m! k if(link[i].number)
( `! v3 ]' P1 ~- V/ D printf("%3d\n",link[i].number);, a1 U+ m2 e8 _, k
+ M( @0 i- q. k" P
U$ R( c3 d* u} $ \" T9 A- M% g$ M
第三种是普通方法for循环
- v! J' b+ v6 V; ]4 W#include<stdio.h>: ]& ?: M2 r8 v. f V
void main()2 O3 m/ ~0 @; [) A; u6 v( N, \, ^
{ int i,k,m,n,num[50],q,*p;
0 M6 Q9 {4 ` n/ ~ clrscr();2 C v1 B+ x$ {9 ?; [: H' g+ a
printf("input number of person: n=");
" G1 f# s6 L: c3 ~ scanf("%d",&n);5 {2 ^: O# H& [3 n% s
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只5 _ e8 |2 w. E5 d/ H" V
scanf("%d",&q);
/ E. L: K. x7 i2 _/ `( ^; N p=num;7 m) A# E$ F$ M* w- Z" F8 N
for(i=0;i<n;i++)
% b- H2 t; Y" d' s+ M$ i6 L8 c. x *(p+i)=i+1;
7 u8 x1 V# r6 {/ p$ N. ?/ b2 } i=0;
3 k7 j2 e4 H. L" C k=0;* S( s0 t% N# w) d. W' T) W
m=0;
6 h1 n7 @0 j& {3 P; ~ while(m<n-1)3 l' r: d2 v0 \' b/ O
{if(*(p+i)!=0) k++;
9 T9 T D7 U( P, u$ @+ e. {, u( \ if(k==q). H; d6 o( m$ b& d( t% Q
{ *(p+i)=0;
6 s% m( q* f0 {- } k=0;
4 `* z0 N) y9 A, G! ] m++;. d5 X! Q# J# m P/ {. w
}
) U `" o, U* M* A4 t i++;4 I9 g2 _+ |: l7 X+ {2 P1 Q& d6 z
if(i==n)i=0;! C+ G* M- N7 n
}9 `( x# e/ l/ w% _; G( S( J
while(*p==0)p++;
- d) \6 a7 {) {9 P1 _1 v printf("The last one is NO:%d\n",*p);& n6 U) V i) d: l1 [, q
getch();
; h) [5 t* M' X) G. A
" I' }8 R% o- _, J} |
|