|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!& k6 B# x+ L f4 z' l9 Y
这几天我在忙着编一个问题,我用了一种方法编出来!
5 C7 Y* M4 Z6 _6 T但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!4 x& S3 f0 n8 y! z% s
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 & R6 L! R4 e8 C. C/ g
3 W- ^, g/ F6 E+ H; P% t" o; X; c9 H y% S3 P2 O! y
题目9 ]' j0 l5 p: x" L' S
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。( s! O+ d7 f- w" q Q. Z- K$ F
第一种方法:利用循环链表4 G% ]: V( c/ q- N: z C
#include<stdio.h>
. i0 [ N9 O0 f1 k# Q# }0 ]#include<malloc.h>2 d/ R/ w: w( j1 e& Q$ `5 W
#define M 8 //共有8只猴子
9 ?/ |; q5 E* Y1 R#define N 3 //数到3只时退出第三只, n* C `0 ^2 P0 o4 o- j$ T: x
typedef struct monkey1 q+ h; }( k0 W! K2 n
{int number;# U) P8 j# W, s! J" d. }" `1 T
int flag;2 Z% a2 Q6 x' ?: I6 G( Q
struct monkey* next;
3 e" C/ N* T. K3 d( E}MONKEY;; B: D P+ z( O( M2 s( ?$ N5 y/ w
main(); y2 q' g. T( Z( {, M# y/ w
{ MONKEY *head=NULL,*p,*s;2 N& S0 n x# R0 K. A
int i,sum=0,count=0;. s$ l7 z1 ]: @: b8 `; _
clrscr(); //清屏! l* n2 I% F$ F W
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
# z- d5 c, x( k p->number=1;p->flag=1;" v/ t; f$ w2 y+ v# s+ T
p->next=head;
) Y. ]8 P' {) l% o8 Q9 _7 W head=p;4 }* i3 p5 [8 f) H. z: }
for(i=2;i<=M;i++)
8 \1 F" r: W- f9 T { s=(MONKEY *)malloc(sizeof(MONKEY));
6 D; b& D' }- j5 a# m( Z# k s->number=i;s->flag=1;4 z5 ~9 q# a E4 {) }+ \- C" P
s->next=head;
( ~4 K: a# Z( P7 k, v- c6 g- z6 ] p->next=s;p=p->next;9 W9 t4 v9 V5 ~0 T; a
}6 m6 K( V& C( g* K
p=head;
+ L5 y9 D% h3 l for(;;)9 h( B1 B5 @& Q5 i) h) Q- `0 s
{if(p->flag==1)
/ M) E3 h& y8 M3 v3 I count++;% w1 C+ d9 i3 i" T" a- t, o J$ Y) |7 w
if(count==N)
1 O9 ] ~$ \' |1 y: Q- R, a ]0 c {p->flag=0;0 w3 H( O) {4 w$ a
count=0;
% M: [. F- x: ?( z, E. E1 ^ sum++;}
- y4 d$ }3 s; I; H5 @* g if(sum==M-1)
& A. M) B% B7 n% S break;
1 H/ R* l+ F' g- _; ]% v, J p=p->next;- T' M: q* |6 Z% T3 A; }$ P
}
/ Q; z# \" Z: X0 `! H% u; X p=
) n- ~: n7 J" d' h6 I* ?1 w6 z- q head;. K. \1 l+ J, q" s3 e- `7 |
for(i=1;i<=M;i++)
2 d+ ?, \6 B( a. ]' n { if(p->flag==1)4 {& }3 E" l' h' L$ d. J; G2 c
printf("\t%d",p->number);
; j( L' M0 j F. \ p=p->next;
% D' r+ C; s) H' x0 v }
: ]2 N6 ]% B5 b2 t+ q5 x/ a" X! ~- z; x
- y+ S; V- G& {3 U5 t$ ^/ O4 b/ F) b* N# S+ o+ ~
}
- m9 y5 b% U& g) ^8 @1 {4 \- Q第二种方法:数组
5 s1 F {% I" b: K#include<stdio.h>
- d* ~2 E5 A8 S% q#define M 8
: u9 o. v9 _0 M$ U- jstruct monkey' T6 E% s4 P8 a6 G
{int number;
- \+ v* I+ p6 P* bint nextp;
0 q& F/ S3 r7 g2 ]" s. _8 E}link[M+1];+ f4 V, E0 X: y2 p
# O4 y. B; d+ v0 s C) e! @& M
void main()
/ P/ }% H+ K% Z9 h+ W' x" n{int i,count,h;
+ r. s% t, a- n# ]! Bfor(i=1;i<=M;i++)
+ `) A4 d% Y6 R4 [( p3 r5 {2 a$ b{ if(i==M)& k& x- \7 w4 @, k
link[i].nextp=1;
4 [- i/ Y/ u1 s" V* y' ?' w6 r else
' a, _* ?$ G7 q2 J8 X link[i].nextp=i+1;$ B6 D( O$ b v9 z& `* j
link[i].number=i;
4 ~; T6 i; n$ A: h$ ], x}/ _, J6 N7 B% a+ z! }
printf("\n");
/ B7 V. c0 B( r$ gcount=0;0 k- B: a( a) U7 v" z* }1 n" p
h=M;/ B3 U$ o2 N2 s
printf("依次退出的猴子: \n");& [7 E" |8 X3 a' p# N9 Y
while(count<M-1)8 u1 ~. u3 u0 l# M: t& b. j2 I
{i=0;
7 `; e- S* v- Z, h7 @7 Dwhile(i!=3)5 @* ^9 G$ j5 o
{ h=link[h].nextp;
! {5 k6 d& W( K7 a* c' g# m if(link[h].number)+ U+ B% d- G7 Q' H. ?: N
i++;}
" {! b5 p8 G* j5 n* k
) f+ ~1 Y/ U+ k% p" L7 Xprintf("%4d",link[h].number);
" Z7 M! C. _! B plink[h].number=0;3 }/ ?; u* t5 w; k! a0 L
count++;+ H$ N4 C* Q6 b% T8 O& ]
}
: I8 N2 H8 o1 J2 _7 F- f1 F! @- Q. X8 |- O
printf("\n大王是:"); U* s+ R& V7 h$ c/ A& V' Q! W/ c3 a
for(i=1;i<=M;i++)
9 E9 N4 e( Q* p, g2 W8 l if(link[i].number)2 Q( b; b. k9 r
printf("%3d\n",link[i].number);1 p. Y: p ]$ {$ V
& w7 }1 U$ Z; I5 S" D; |9 s
" y8 i4 r$ D [1 M( ]7 _3 o' G$ v}
n" P+ |) i4 z: k; _$ f' D* z第三种是普通方法for循环
! F8 b1 H+ ]# k/ G/ X% R( f#include<stdio.h>
' Y* B- X$ u- ?1 V R- d. k/ D& jvoid main(); P W7 n8 U( ]
{ int i,k,m,n,num[50],q,*p;
7 \, d) O# N7 {1 s0 b2 E clrscr();
5 u6 V9 ?& y$ [: P) f( F' U+ D printf("input number of person: n=");* p1 j0 @$ Y6 Z! b4 B1 v* `
scanf("%d",&n);+ H0 K3 ?' w* r% s
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
6 X& C2 v% ~. }, T scanf("%d",&q);$ ?* Y$ Z# h! j8 c3 [! Z2 u$ R( ^
p=num;9 q! e: C8 t4 t( u
for(i=0;i<n;i++)
! R* S" W/ I6 B+ G# l *(p+i)=i+1;+ {4 \9 W9 U) U+ r. P9 |1 y6 h
i=0;
% U4 @6 e. u- y0 F2 ~ k=0;
0 u L9 Z# V, }: D! F+ O- k m=0;
3 |7 E7 }" B0 u$ G9 V( H while(m<n-1)
; }+ R2 J6 D, o7 B {if(*(p+i)!=0) k++;
$ f1 j7 |7 x" k9 x; M if(k==q)) ?" E% M( ~2 D1 d0 w4 w
{ *(p+i)=0;
7 K7 E1 V2 C# D4 C. f( C# ~ k=0;1 ?3 z6 s2 R/ x/ N/ U
m++;4 d) A7 ~' A/ O8 \
}" ?8 H$ G, r' F( E$ [! [. _
i++;+ C; z( K6 G$ e. [0 ^ x! I
if(i==n)i=0;
7 }8 X. b6 { H4 [( K }
/ Z b5 O( M+ J9 |. R3 Q6 ?& E while(*p==0)p++;
# ]- y( a" d" q& w& B2 S* ? printf("The last one is NO:%d\n",*p);
+ {0 w8 h! ?' |$ y$ c" u3 W7 C. X getch();
: F- p3 _! J% e0 C R: `! x" b6 R& x" p; a7 h1 J
} |
|