|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
×
大家好!7 [3 i+ Y) w# q! @# o0 l! Z
这几天我在忙着编一个问题,我用了一种方法编出来!
. _* S$ _( g" B- b0 ~. F) P但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
4 ^7 i! D0 E( Q注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
( {4 t. `6 b% m2 b: m9 d# n5 o, S6 w4 Z' H7 _ w5 y4 _
/ Y" F {/ y1 x, r2 m9 L+ k' a) K5 l 题目
9 i4 X( X; |, O9 C( o F7 B& m `; i山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。- s8 @; t! c( ^+ R
第一种方法:利用循环链表6 \ i8 D- [6 m& s% M
#include<stdio.h>
9 \9 J2 x; m) R1 k$ }0 U& s#include<malloc.h>) b" f7 Z- _" x; o
#define M 8 //共有8只猴子/ S- R5 x8 w5 b! \4 {" w
#define N 3 //数到3只时退出第三只: e. V. S( ^" _% y
typedef struct monkey
+ Z9 M R, T' p1 g4 J{int number;& B4 Y) Z% Q& t4 o# }; G+ z$ z
int flag;, B! y" ^5 O; d, F! r a2 [% \! _
struct monkey* next;1 f/ D( d" [- g' h+ l" y2 J- ^9 l
}MONKEY;1 s* @3 Z# t3 n5 t
main()
9 f5 c [+ l. j2 ]{ MONKEY *head=NULL,*p,*s;
2 n* Z, W. z) M* j int i,sum=0,count=0;
9 S, m; _ i9 B# J: E1 E clrscr(); //清屏
[! s% a$ z/ @! s k, R p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
; G1 f @, S6 p% l" P) V p->number=1;p->flag=1;
2 f' B0 O8 z5 g, J p->next=head;! M1 F* n8 f: M# L) X
head=p;
8 Y/ ^/ W y% m/ y. } for(i=2;i<=M;i++)
) R9 |8 |1 [& \6 d6 ` { s=(MONKEY *)malloc(sizeof(MONKEY));
( M y, i3 \9 s( N' t s->number=i;s->flag=1;3 U3 i* q1 h: g8 P
s->next=head;
# o# x; G& ]4 H; J+ A p->next=s;p=p->next;
# v# B# Y9 k/ \8 D2 H. V }
* `8 T6 X2 J2 [% k. P* k p=head;
3 o6 i7 }+ a' U# V9 r& [% } for(;;)
* d2 W3 |* \% ]6 y. Q% q/ B3 o {if(p->flag==1)
' E) N' E+ \2 T0 i6 Z, L2 ~* t- s- t count++;
4 e) |* }, X7 ?' ^1 J0 r0 {- N, P if(count==N). Y- S5 X q: t. D ^) B! O
{p->flag=0;$ i( d* ~7 k; N' J# K
count=0;+ i* i0 o/ Z* g. X1 }
sum++;}
, W6 K/ u* D- A2 E' V if(sum==M-1)
8 V" C" G4 i* Y7 M break;
+ R! X/ j* m( V4 r Z p=p->next;; {# Q- g. l( }; t7 h8 ~
}
' D0 j- X+ E4 Q, d# E( ?9 P p=
3 u/ ]4 J0 W, Q, U4 b" n8 h- s head;
/ g6 C( k4 x2 S: I$ B) Q( S for(i=1;i<=M;i++)
) R# Y. _1 g7 Y C { if(p->flag==1)
& s8 {' l4 h" C; e) W7 x# e) r" [ printf("\t%d",p->number);
7 J$ U7 c5 `8 I( `& C: ~% M p=p->next;( d {7 e+ c, N8 N
}# I; l8 ^' X) Z/ T: @
! T* K; t" `7 a6 j
* t$ H" Q' w+ j0 T0 A. Q+ c, m6 l6 t" K3 i4 H
}
& ^0 f+ G6 }: i0 ?2 d第二种方法:数组+ G5 K5 g0 I* _* j+ ~
#include<stdio.h>
" i* ^3 |6 c$ J5 }* g#define M 8
3 }. y7 u: {# }8 ustruct monkey- \9 ~$ c' E: n! ~
{int number;7 I& R3 S2 l8 L% n0 C5 r; |
int nextp;* ^' ^% P( ?# j2 s8 J! w9 c3 ?
}link[M+1];5 j2 A+ B3 p4 g# G1 @* a
9 ]3 ~. i, B$ g" |! o! V
void main()+ K( \% l" D& R# r& j% z7 y% M
{int i,count,h;
9 ?& H/ F, a3 s3 a0 vfor(i=1;i<=M;i++)
4 v8 p4 q/ O! \: Y: ], |- U. { |{ if(i==M)
3 t0 a/ n6 z: l. H* d link.nextp=1;# }! N, { V( D6 A: b
else
* `; T6 \ C$ l link.nextp=i+1;
$ x" x) n. D" U0 R* n7 Z link.number=i;
/ C6 ]2 i2 G1 z}
. l) H2 ^/ I. M2 C2 v) E7 E; z4 Jprintf("\n");5 n* {6 s7 G% O9 P# s2 J
count=0;2 m! `/ U& R) Y% I7 z" d N6 I
h=M;
* x2 i# c7 M4 {* o7 oprintf("依次退出的猴子: \n");9 v/ x$ c( y+ E9 ~" S1 H1 \. v7 c
while(count<M-1)7 p3 X7 ~3 }- x* H1 E
{i=0;
% L) N1 D3 y4 O: c7 T, h( M ^while(i!=3)2 y& e7 X: g) O! p9 R& F9 @& O
{ h=link[h].nextp;
, C6 T! P1 V3 T& w) p1 S _ if(link[h].number): O4 T4 G& F# K
i++;}* ^: |* |, [9 A/ {
3 d' G. I) R3 y& S! H
printf("%4d",link[h].number);
6 Q% f. A5 ^5 c5 |; L8 Wlink[h].number=0;; ]8 `) w, J+ f
count++;* L4 D9 T% \! A1 G
}
D9 o. X2 r1 t/ o# p3 b- Q3 {% M" y( a- l& S0 D3 d
printf("\n大王是:");. W/ D) U7 X i: |) \. c( b
for(i=1;i<=M;i++)
# I) N( j- G. ]$ p2 {! ?' D if(link.number)3 Z5 P2 Q9 j- R( K1 r
printf("%3d\n",link.number);
! P5 m- y# _3 v2 w* I
# @: d" e( T; X. j Q
/ v% _- a4 E6 V' s% J}
( q" E! ]% I: Y第三种是普通方法for循环" E5 X# D2 @6 \8 ^2 Q
#include<stdio.h>9 A+ Q* u5 x8 f/ ]( Z
void main()0 A# ^6 ~( n% V0 g. @
{ int i,k,m,n,num[50],q,*p;
; _/ v1 k& f q8 { clrscr();
% D2 Y4 L: X' Z9 u$ m printf("input number of person: n=");
' h3 l1 G0 d- V! Z, Z, X scanf("%d",&n);
' i: A0 q) g. X3 f3 ~ D% hprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只( \- _/ a" s' t; Z" y
scanf("%d",&q);
6 u* [; s) `1 w) @6 Z" p p=num;( _; E8 K( s" }& f& @4 `
for(i=0;i<n;i++)7 V! ?4 B) a+ M& A" ?1 X+ [
*(p+i)=i+1;
$ e5 o( d( D# ~- b1 N) E i=0; @- w! t" ~' V5 d7 g0 J
k=0;1 i6 s9 T6 o4 O% w
m=0;
1 S6 F) G( J' g1 q' L6 Y/ k while(m<n-1)9 e o) |) j9 t) ~5 ^+ \: h
{if(*(p+i)!=0) k++;
4 P8 a- U3 L) W R' K1 ?' Y if(k==q)4 h; F; { h% j" w
{ *(p+i)=0;( T! v0 C9 T6 ~9 j: z6 k
k=0;
' L+ p2 y- K) | m++;
8 C' D3 Z+ q' k: t1 U# F }% A2 g! D; b0 N# a
i++;4 X" y- F, S; B% O) P. O' n
if(i==n)i=0;
* q8 N* ~8 ^ f. B8 @; n& Y$ _) ` }
! t" g& v: |8 J9 R" Y# _4 g while(*p==0)p++;, S7 n2 @; F) p: q) Z- B' p
printf("The last one is NO:%d\n",*p);+ T/ j. L! D' e k" ]& {6 c
getch();
# o- M( j* Q3 ~$ G% o# g% |3 E& y1 z# ]. ~3 u3 \) T1 H- o( S
} |
|