|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!& M* `$ M3 j( X* v
这几天我在忙着编一个问题,我用了一种方法编出来!
9 u6 j4 ?+ O" S! ?6 f7 F; |但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
5 \# ]0 ?2 X ^( i注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
4 t/ P: a# P" A/ c7 `. I+ j& m
& G( Y+ j$ Y6 x& Q6 ^: U" T7 ^) L7 i
题目3 C3 B E1 x2 l" J D
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
v/ K4 J1 p, j& V+ `) {& l; [第一种方法:利用循环链表: t7 z/ f5 Y: {, S" h4 Y
#include<stdio.h>
$ M# \8 d' n6 @5 C; c. Q#include<malloc.h>3 F4 d2 I2 J% E4 L. _ D/ M2 _( [
#define M 8 //共有8只猴子% o* r* P( X! H
#define N 3 //数到3只时退出第三只
9 Q+ {- w) s" X5 P- o' C% i5 R' z5 Ztypedef struct monkey
3 M* e0 o: @$ G: s: R{int number;
& _$ o' ]$ A1 X+ _int flag;6 x1 }) J6 ]1 Q9 M
struct monkey* next;
3 }+ @/ k5 f- Z' w: k+ k}MONKEY;* Z/ U; d; I7 X" V+ s& E
main()
- ?: c! `8 }! D2 b1 B- R3 P{ MONKEY *head=NULL,*p,*s;9 Y. a2 H' T1 N, N5 f1 b
int i,sum=0,count=0;: K5 j n& s! ]( ^$ k
clrscr(); //清屏8 \3 M+ k( P7 U! L K
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
2 M* S3 R# @: z0 i; ~5 { p->number=1;p->flag=1;
3 ^5 A. G' s% ~" k( a( c& x p->next=head;: G# g1 _. v/ c9 g( R
head=p;
) R4 `) s5 j% u; x" g for(i=2;i<=M;i++)
% C$ A% [' X7 c! W' a# D4 W6 P { s=(MONKEY *)malloc(sizeof(MONKEY));4 P# _: C7 v+ Q' F& N8 I
s->number=i;s->flag=1;
/ z* v9 ?( G' O& H/ e s->next=head;1 t6 P! R) d! z2 t
p->next=s;p=p->next;+ d0 k) `8 O& H% |8 u2 |
}
4 w4 r0 P/ W9 X: _5 q0 c p=head;3 T$ B4 T% z) w, f! r: u& f) Z( w
for(;;)! k7 N# N3 K; A4 o
{if(p->flag==1)
" l3 y) l/ k& I& W L& W count++;6 e0 B& |/ L3 }: \# D+ G# C
if(count==N)
3 G% e! ?) J1 C {p->flag=0;
! b% e$ A k6 [+ t count=0;# T9 E) C; A* j0 f
sum++;}
* `' k6 e7 j1 E0 l! K+ { if(sum==M-1)6 V$ ?9 ?* U$ U* M S5 a+ j
break;, S5 J: f' [: @5 G1 H2 Y$ u9 v
p=p->next;
@7 }. \1 i; p9 g' ~ } ^ T! ?( U8 j$ F# }9 M
p=& r$ T" d0 b: W( T
head;
. e1 i3 C5 r, R; D5 ], F for(i=1;i<=M;i++)4 B: C# z3 V4 a$ o! }
{ if(p->flag==1)1 m; s5 t. F: d7 ]6 _3 r, M, H
printf("\t%d",p->number);3 V7 k \2 R' [% V
p=p->next;
( S) h. T: a' z) c; [1 W {2 O5 S }
: f, i" r* p1 i( y- r
8 r9 W- M6 U9 ^
3 m! q! V( a5 y A( r8 q' \5 \- v" s
6 h# w% Z* N7 G; W/ r} ; \$ c" Y1 u4 {4 L0 \1 O! G) R
第二种方法:数组 X V! D2 N( Z* f
#include<stdio.h>
4 H7 b* |, r- K#define M 8, ?9 T& K# v: ?8 `3 n
struct monkey- ^) y0 Z7 H- x/ h# q$ x
{int number;
( B6 b' A9 P" ?/ rint nextp;' V& o9 s9 x5 `
}link[M+1];
7 I2 p- b) W b, X7 I8 h
1 S0 @4 H8 G( L1 |0 N. z7 Ovoid main()
3 ^# ?4 n0 V* h' l9 m) t{int i,count,h;: A* y9 v& f, C- [
for(i=1;i<=M;i++)& v" z$ R8 k, Y& M7 z. N, B& T+ ?/ U+ d
{ if(i==M). E0 g' l5 E% ^" h
link[i].nextp=1;
: Z$ t3 ] n. q; n& x2 X6 B+ G else
% }- f7 C ~$ j- l( h) e; h' j link[i].nextp=i+1;+ A! S3 } b" w
link[i].number=i;1 \2 g/ a$ @- V
}
" i5 p: T9 D3 p. y) rprintf("\n");, ~# V. y! a z6 k& j R' \
count=0;
, j. ]3 ?6 R5 Nh=M;6 M" ?- f$ d6 L4 y, A
printf("依次退出的猴子: \n");
" d! c* g) _* V" P) Wwhile(count<M-1)
2 C( V3 k; T" X* O6 [/ S{i=0;
1 q& g9 T4 [; t( p0 V, ` a) twhile(i!=3)0 U" s& y( X/ c3 L9 E* \# b
{ h=link[h].nextp;
# M1 G+ s: P7 C2 k! X if(link[h].number)
, J M+ U& X# T1 p* \4 H$ l i++;}
; H0 w* T8 o2 I; \2 {' n0 T
! S* ]* O' V4 Q; y: e' q" h) Eprintf("%4d",link[h].number);
6 q# R) l' u- m6 r! j4 Zlink[h].number=0;
0 u% T: B5 [; v) n& V, Ccount++;
; l3 i5 @' d$ y7 e}
# T& u) J) ~4 F0 q4 z+ u0 q0 C& v8 f) n+ M1 q0 U% L
printf("\n大王是:");6 H" p% p/ H, Y
for(i=1;i<=M;i++)
- Z# b4 k7 W ^- y/ ]& u M; [ if(link[i].number)+ N1 P: M- N9 e/ }1 O- w0 F
printf("%3d\n",link[i].number);
9 m3 B0 V8 {' W" p; V, P$ Y& O$ h. n( \4 c8 F
6 v* D0 ]6 v- i
} 8 X. F5 i9 t# B9 ~* Y6 P/ V
第三种是普通方法for循环
' p" x" M, m0 t' J1 m) l7 j6 n0 P' a0 ^#include<stdio.h>
# b# c" G5 Z' S5 A [. d( H. [6 |% fvoid main()- T* d: @+ O% {/ _; Q6 N7 j
{ int i,k,m,n,num[50],q,*p;4 p* L3 O+ r- O. _: ]( z V
clrscr();
! e; e) T5 A6 V) p" m8 V$ W9 U printf("input number of person: n=");3 y7 s. q- i# s5 A
scanf("%d",&n);5 A4 f- z8 `$ e& b
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只3 M8 P- x8 G) a8 C% m6 P% O
scanf("%d",&q);
- W/ Y. B+ X2 r- b7 A4 _# f2 a7 @ p=num;: ~ y9 v# T; Y
for(i=0;i<n;i++)( X9 k/ E! T5 |- ~4 \6 x0 F
*(p+i)=i+1;' h. Z7 ~! H$ u
i=0;- [. ]4 [ C) _* y8 P: Z. V1 C4 Y
k=0;
& |; Q; x: y' B- M2 [% |4 d; u; g0 x m=0;( g H+ B$ c. Y- b
while(m<n-1)
! s5 k! @# c0 i: ?, ? {if(*(p+i)!=0) k++;
, O% c8 @, K( l8 o if(k==q)9 ?/ j# @5 V! \1 j# m
{ *(p+i)=0;6 Z* s% r; O, M% W* f# v
k=0;' o) X8 o, K% D1 k( z
m++;# F( e. T6 o+ o3 P# l
}% L, e; A7 y# z9 r, `
i++;
( M; b1 |+ X u* \ if(i==n)i=0;
$ V2 U7 P7 ~; t4 ^, k$ E }
+ f$ _* e0 }& S4 ] while(*p==0)p++;9 I+ j; B" M/ t. G$ i; L5 q# S
printf("The last one is NO:%d\n",*p);& S" ?5 d2 P8 L- w
getch();
& I6 A, R) [# ^3 }5 p
V/ K" L! M, ~% k} |
|