|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!& b% _6 n+ w) X# ^; I
这几天我在忙着编一个问题,我用了一种方法编出来!, [1 B% g# B' B1 i# K
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!+ `3 w/ o4 }1 M' n* h* }4 |
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 ; q2 A) q( m3 J$ N6 d
0 [4 V4 V- I2 ~0 Q! ~9 U: D4 i
9 d9 R& u: P( X& B" W1 o
题目8 O" D1 u2 ?) Y. l; N
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
, O8 y$ |( z+ i" B$ z9 J' ?第一种方法:利用循环链表
" M" p; N0 f4 s$ m. `#include<stdio.h>' m8 R. I% B; O5 ^0 g+ |! B6 }/ a
#include<malloc.h>9 k$ r, d& y" f' ~& ?, E2 [
#define M 8 //共有8只猴子
/ J9 G) d" \1 j#define N 3 //数到3只时退出第三只
) C, d, t* l0 H4 u$ btypedef struct monkey
! g1 L" o) f# ^8 ^4 i6 w{int number;
7 r @2 C' s' k1 d* P) I* w: k7 Qint flag;
/ r6 G P0 t K/ X9 d$ l, pstruct monkey* next;
3 _" h3 U& B( Q$ T" F}MONKEY;0 f8 O$ F( g! A6 a0 e% V
main()! s1 Z; O+ N5 I2 [) y
{ MONKEY *head=NULL,*p,*s;# [! w0 J# w8 v: }" b
int i,sum=0,count=0;* _( b* D- }1 F7 w0 S! J& E
clrscr(); //清屏0 H; Z. Q% e9 u0 P& h8 z2 G D; [
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存7 c# ?& E8 C) l+ b% n
p->number=1;p->flag=1;
/ V4 S% I1 C1 C p->next=head;
: G p L$ ^. Q" p% S7 r: E head=p;. E9 Z( x. c- V& W
for(i=2;i<=M;i++)
, j+ }! Y5 @8 i { s=(MONKEY *)malloc(sizeof(MONKEY));4 ]; ^% t7 N6 D& @9 w8 j
s->number=i;s->flag=1;
4 p$ X: W. g/ d& p s->next=head;
' @) y" b) c6 l& h9 _0 F p->next=s;p=p->next;
' |2 j+ k; C& W; n s, E }
) P1 q0 e' e2 ` o' T. y- K' c p=head;
5 F* `* E. {4 C6 q4 I for(;;)
; B- r0 H! X- F7 D; z, D {if(p->flag==1)/ m% N# l4 O' m) @
count++;/ F7 ~ S, Y# ]
if(count==N)
( y _9 t" h. x( b9 C: Q5 M( k: h7 @ {p->flag=0;* `) I0 @- f0 g0 J+ O( F# ^
count=0;
7 ~4 p6 u. e4 \' @' _ sum++;}& ` x' x, V7 J; [- ]
if(sum==M-1)! m* m: D1 Y1 H& T1 ]
break;
4 g- O, [8 n- L0 U p=p->next;
) O& x J& x2 N4 w( m }9 O5 k* f6 s# ?) G, K# V
p=4 P% `4 k& r6 K& O8 O
head;
7 }; g4 M1 ^4 R$ v for(i=1;i<=M;i++)
+ `8 y2 T) C1 |2 k { if(p->flag==1)) B) d! P( t/ j# F* D; n4 S
printf("\t%d",p->number);7 `, u, x9 A& Y# \9 | W/ ?9 W
p=p->next;
$ S! j/ a+ P& O2 V. Q }# m+ e( e! j+ ?
8 l& v: k! R5 O$ \0 m3 M: X8 s2 X& s, M, |
; m$ b2 j3 |/ l l; r} {* p8 l3 [3 w/ d. H4 y
第二种方法:数组. Z& G6 K) Q/ Q5 u& k5 e
#include<stdio.h>
4 r+ s/ B% p L, t#define M 8
6 @2 H0 F& I& ?# y, J8 Q. _struct monkey4 A- G+ o, |5 ~
{int number;4 o8 a" }6 ^. D. f$ V: @0 ?
int nextp;1 r* n4 `* o# ?0 _# s7 I
}link[M+1];) P! {; Q4 J/ H- g1 C
. W, u9 K$ C; t0 [# g0 A
void main()
9 p( j8 `/ T, C. X{int i,count,h;
5 n' U+ L8 G6 K6 ]0 [) Ffor(i=1;i<=M;i++)/ c* T' Q5 N) Y2 v
{ if(i==M)
5 R, B, J8 d. T9 G; F7 g% N link[i].nextp=1;
9 S0 B! R8 E+ H8 n* Q; E else/ [. {3 T7 L- t g$ f/ G
link[i].nextp=i+1;. L! O3 J" u8 E# o7 ^
link[i].number=i;' ?5 h8 r* q: r5 H& k
}& l( f1 a6 E, n k9 Y0 e
printf("\n");' T0 F( N- W1 ?+ x5 }1 o: ?
count=0;4 E& d8 y# j; X* e& J
h=M;
! @1 s9 N' q% L; a# fprintf("依次退出的猴子: \n");. o1 x! o8 w$ X% X) @
while(count<M-1). H9 D+ t7 B. l
{i=0;, ^' e) [' A6 j; F+ ~' ^
while(i!=3)1 T- l( L6 U8 V! Y
{ h=link[h].nextp;3 `* u1 x1 f, N& U7 Q, o
if(link[h].number)
8 C! A' C9 U. v- p i++;}, K7 |" j: q# z3 [% T6 D; Q) x: q! `" G
. Y" t$ g' r" f- N. A9 X
printf("%4d",link[h].number);
7 u& w; I) L8 b7 _* Hlink[h].number=0;. H" s% F+ Z/ n8 E8 U6 ~; o
count++;# p' N+ X; b V$ @' M# z4 ~2 W8 i
}% o% |: i- j( V8 Q- p- _8 k, {
; H: E9 a0 b. j- B+ F7 vprintf("\n大王是:");. S9 K# j# E# d" S+ T( K: Z
for(i=1;i<=M;i++)* _9 k( j; f: E, m, `- P
if(link[i].number)
) V: Z: Y4 B4 s9 @9 R2 n printf("%3d\n",link[i].number);
) L' `, p% g3 f% X1 G& c4 b+ G; }8 z
& V/ s/ Y( J& E$ d# Y4 \
}
& @8 A; J5 @6 e' h2 G! {1 W# x第三种是普通方法for循环
3 L) K4 i- \8 u- z+ ~; U/ i#include<stdio.h>
8 N3 X0 I( f9 z: s$ Rvoid main()
* H6 V4 K) J' h/ v, _2 `% Z{ int i,k,m,n,num[50],q,*p;
. h* [- d* y' \$ n clrscr();* i. g( i4 j' z8 d8 q2 e" `$ Y( ~
printf("input number of person: n=");: L' @1 L, L: I* s+ R" N$ |/ c
scanf("%d",&n);% S. c# v0 H" `3 f0 h; m
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只7 b2 j$ |- o' U7 n
scanf("%d",&q);1 q, ?7 E. s) p9 G0 K
p=num;
( E- S9 z" V2 R for(i=0;i<n;i++)
& [- b2 e: Z7 N Y. i3 T *(p+i)=i+1;
9 u8 s( L* {# r2 b- [0 M i=0;# ] V! M8 k, Z4 k# l/ j! |
k=0;
) S/ p, h- M) p* M6 ~; I5 F m=0;5 Q2 L% ~/ f% ^4 v
while(m<n-1)
& X- q: [; _3 k# t {if(*(p+i)!=0) k++;
0 l4 b; p( Q7 {2 p- F2 T2 S if(k==q)5 W% H) J5 K+ `7 r3 s. ]* y
{ *(p+i)=0;) [1 s N+ ?1 G+ p3 \
k=0;
( p+ x5 S2 Q2 q% u m++;
. e) r+ |; Y) }$ x4 I7 @ }
5 }! J8 h# Q) k# |( G7 Q3 T i++;
, \2 u8 p& S; ~, F if(i==n)i=0;
9 d2 q ~, j' [: b }3 {* o6 i: F( _% W' s
while(*p==0)p++; _; y- _; f# x' Q e
printf("The last one is NO:%d\n",*p);2 G3 \) j9 @& Z- h
getch();
5 q0 K, x0 E( H) S0 \" H3 R E: [( r4 w- D7 v
} |
|