|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
/ h3 g! y2 f# y, k) g* |0 C/ H& w这几天我在忙着编一个问题,我用了一种方法编出来!& _- l% [; y8 ~3 m+ X, x
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
Y: y* D: Y* a/ E, M注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
% l1 L8 C- A6 u" E! Y" p1 ~# S3 s" P" [6 s+ E
$ Q5 \+ B; s; A# `) Q5 Q) [* } 题目6 j C* W/ j5 @3 m, e+ o% A
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
8 T; `5 Z# u# d( j' n% D第一种方法:利用循环链表2 p+ C+ C- t- @; S* q( T) s6 U! n4 h
#include<stdio.h>
1 H" G% J6 \' \#include<malloc.h>3 z# x8 r7 j) S4 q
#define M 8 //共有8只猴子
$ U& z) C2 j* J: S& N2 a#define N 3 //数到3只时退出第三只
3 Y, c( J7 L0 dtypedef struct monkey
' `! w1 t6 ~" b2 V% o6 {/ S6 B7 B8 {{int number;* Y- G& K: _9 L b1 h
int flag;
3 m8 t! y' y7 S/ }- R! V! Cstruct monkey* next;
% n0 |: o6 X, U, `}MONKEY;
8 g* }) v! A5 g0 w$ |9 b- O3 T I4 mmain()3 P5 W" V4 e: z4 {; n+ B. O
{ MONKEY *head=NULL,*p,*s;' z: g$ s& Q9 Q6 |! I
int i,sum=0,count=0;
; S- G# s& T+ w clrscr(); //清屏* j! v5 D$ R, y& F0 v; P
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
q/ |! p. }! I" o6 { p->number=1;p->flag=1;
7 ^ g. Q4 c" Y: a* @+ q X, O p->next=head;+ [+ z, x# H6 B, {7 J
head=p;& d, ^1 z% t- u" @. x) {" {
for(i=2;i<=M;i++)
2 S0 L' Z5 I' K- a { s=(MONKEY *)malloc(sizeof(MONKEY));
) e4 l$ b5 ?+ M s->number=i;s->flag=1;0 T* w6 F# V2 C+ t& r
s->next=head;8 X/ l0 h" t- A* q) s$ q
p->next=s;p=p->next;
8 W5 Y( u0 d0 f }" I2 i4 D! g) X+ b) z
p=head;
6 L0 ~" V; L" ~9 n- M2 ?6 y for(;;)# z! Y, P. f3 [/ [
{if(p->flag==1)
( A5 Q. p k$ r- R* i% m/ K8 B' `7 ^ count++;
/ e! j1 q' G* u) V+ } if(count==N)( @) O- ?* u* Q
{p->flag=0;/ Q4 a& H/ K: K8 y9 X3 R2 _, l9 C
count=0;* M% _$ h% `# e% d! S
sum++;}
) j0 E$ e4 |( k. X' H; B if(sum==M-1)
! z! F$ ^( W( C0 a break;
% c$ b" e1 a! q. ~: t" [' N p=p->next;
: g* W: J3 _& A) P9 A) ` }. A4 e6 j8 H% l' G: M/ L
p=
9 T) h$ V5 j5 D4 v8 ` head;
: y3 ^' _; ~/ f- i for(i=1;i<=M;i++)1 ]/ T$ Y, I* A5 w' Z
{ if(p->flag==1)% f! M9 ~' B, q/ C
printf("\t%d",p->number);
6 f0 t4 _" T/ r/ D9 L p=p->next;$ G* J3 X6 v8 a
}* D, a7 E l) l* o) V8 K$ |
# t; T! ?: k: ~* F3 [4 v: D; c/ e8 G; I: d2 U/ e. u. ~+ L ]
: G8 v) I) [/ `0 g} " b0 N; F4 E# d0 y' q$ H
第二种方法:数组
- u0 l, N0 m' r' l/ W* |! k#include<stdio.h>, Z! o1 R G, n" i9 q5 M3 N
#define M 8
# z* F9 C& j2 A& [% zstruct monkey
: x# z. l- W. K4 P( W" V! b8 `" B{int number;
! F0 Z7 n' x- F6 H( D5 \/ A3 kint nextp;
2 N: X! `: z7 q: x4 I}link[M+1];9 ]0 Y! \! S5 Y7 e% B$ z. B7 X0 u
$ s/ j, E5 U2 U1 w1 W# H
void main()
; b: L( z3 S1 P' D1 K. D0 |{int i,count,h;
+ f5 s# a! {( c7 g% C% F k4 Tfor(i=1;i<=M;i++)
2 o9 d i5 V% l$ p% F{ if(i==M) d8 ~8 s6 P# F, r+ ^1 V5 E( M
link[i].nextp=1;1 b2 i8 o/ Q# p6 v5 W
else
/ {; k' h7 U" Q1 n5 b$ ~, V link[i].nextp=i+1;: J1 e3 w: G' S# q
link[i].number=i;" I6 W2 ]" s' P( [2 M( o r
}
8 `/ a: a7 u4 a% h9 r- Tprintf("\n");
4 K+ k! B( T: ?& acount=0;$ I3 Y' W! }& ^8 j9 l
h=M;" |9 |3 ?* M8 I4 v! m z& O3 s
printf("依次退出的猴子: \n");
9 ~ @ _. c9 C/ s5 \ iwhile(count<M-1)5 \2 k+ X, M( r* ]
{i=0;
% X/ D, b @/ C: d0 rwhile(i!=3)
# w- C: [ T- S{ h=link[h].nextp;# n! a0 O5 y/ |) |$ Y
if(link[h].number)4 ?) c: w0 N* x) j S
i++;}! U+ ^1 V) l* r8 @0 s- ^$ Z
C6 h' Y" F, Z3 Z9 eprintf("%4d",link[h].number);
/ L- U* v* V: t& v5 N+ W' Alink[h].number=0;
9 h0 G5 X: U5 G' E% N9 Ccount++;
$ c+ w5 T7 o! e5 {}
v* B+ L3 _ @4 L* Y$ t5 r( l
printf("\n大王是:");
9 R* {9 u- {5 j, ~ for(i=1;i<=M;i++)
5 f2 `2 D+ G! D! J$ m if(link[i].number)! X/ {# U" k$ H" l2 P9 u
printf("%3d\n",link[i].number);& Z/ x3 X* A( W* ^5 {7 L g7 G
* R Z5 v9 p2 q' f0 m
4 I$ i& ~" [3 x: u* Y7 i U- o/ [} * @3 K9 E6 C0 g6 l
第三种是普通方法for循环
; f' [7 y3 y7 n#include<stdio.h>
# o/ D& n( T& pvoid main()
. Z1 _, _( g) U5 ]{ int i,k,m,n,num[50],q,*p;& @. s. E D& K& d2 K' @6 `/ ^; |
clrscr();
. H" d( P) D7 h" y9 V printf("input number of person: n=");
# n, b6 W- w& t) T scanf("%d",&n);
3 X, \0 L( Z6 \) F% i. a) Sprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只+ S9 J' @: j- ]) l. L. T) _9 l- g
scanf("%d",&q);- |4 B# y& Q9 z6 w( Q- I% b
p=num;$ L5 O# f% p( H6 `
for(i=0;i<n;i++)
* l3 f: Z" B* ~/ s *(p+i)=i+1;2 }; v+ c6 A' k+ J( T) b0 E
i=0;* q+ i6 C! {, S+ U$ \+ E
k=0;
; @" k0 N# c9 X3 n6 D- Q m=0;) \2 ?( @: U1 Z9 V0 B5 \
while(m<n-1)
2 v- | r+ \- N4 Z% H4 c) k. N {if(*(p+i)!=0) k++;- I1 t# C1 p4 ~" r. w8 R' a, d
if(k==q)
) P, c, e7 e: [ { *(p+i)=0;
v" B# G1 ^6 H& D5 J$ A k=0;
9 G5 w" c j6 H& C S4 s E5 V( t m++;! J: K' I" }+ E9 g. l
}
% k' j( x5 B$ f$ y- h) y4 } i++;: \0 e$ E. Q7 L" c7 i5 B% b8 v; m8 H
if(i==n)i=0; C% k8 S* p' y% W$ C+ @
}
# Y$ E" ~1 ?( H% n: m while(*p==0)p++;
6 F. G: }8 L4 C' e% g printf("The last one is NO:%d\n",*p);
) o5 k! ~7 h3 E2 ~% g getch();
. `$ `7 H, u/ S/ S9 i8 i- N |! \5 r0 N. L4 ]/ `) `3 q
} |
|