|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
: l- h% c) l% e5 T) o* g k+ w这几天我在忙着编一个问题,我用了一种方法编出来!7 t: b$ a: f/ j% c& `6 p
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!+ y, d% u/ q! F1 E! I. M$ Y
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
# @3 b3 X q5 S |0 E7 G( k6 w9 W+ Y ^
& q: E4 v" W* {+ {! q$ @
题目+ a& d v5 S+ i5 j, K" @
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
5 z0 d" r( _; S) A# _6 |" O, f第一种方法:利用循环链表, E3 w2 {: ^, E& Y: \. c& V$ e
#include<stdio.h>
6 d8 E) e7 Q" K; i/ x5 T; [7 h#include<malloc.h>
/ n# A# Z& j# u1 z, G#define M 8 //共有8只猴子
& p4 \4 S( u+ |$ L6 b- |; H6 S: M#define N 3 //数到3只时退出第三只
* Z" d% ~2 S- r" g. W) {' Htypedef struct monkey
8 K' o1 K [6 Z) d* p{int number;
, j: e' O1 \5 h! Hint flag;
" T6 t2 C5 a& S* Z& t' t( Wstruct monkey* next;1 [4 c% @/ b0 T" y
}MONKEY;3 Y/ N+ T" y8 d2 f+ G1 g# D- H
main()6 L" m* S; k7 z( r9 h m8 z7 l& W4 |
{ MONKEY *head=NULL,*p,*s;6 i7 [0 e0 L+ L! k6 [
int i,sum=0,count=0;% c, `- E$ z$ C5 v' A: T
clrscr(); //清屏
1 H ^' w( [2 K p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
/ g5 d5 N* h' U7 u+ @, R+ b p->number=1;p->flag=1;
( G# D! q9 i c, V p->next=head;: A' z* M% z8 C* S3 F
head=p;
8 ~* u: w# ?# ?" O6 p for(i=2;i<=M;i++)& F' Q6 k( K& h1 R1 _0 \* p9 B- ?
{ s=(MONKEY *)malloc(sizeof(MONKEY));! }/ C- P2 z1 m( U
s->number=i;s->flag=1;( d$ [* c! W p: H# N
s->next=head;2 L3 F a- f! } Z, R# N, d
p->next=s;p=p->next;
0 T/ e% J0 t: { {" w+ f }
/ e( ^8 B: E, S4 o2 P+ X! z p=head;" G1 t" v- y/ W% }3 n
for(;;); N* o2 R5 t8 _# O: \, x0 ^. l
{if(p->flag==1)/ T1 F: S3 _# _- @( v( n
count++;' j* {9 D6 X1 a
if(count==N)
- `( E- _% j6 X7 C# Y7 k* ^, { {p->flag=0;" ?, J& L% g& g
count=0;, M" t \2 D: @ b
sum++;}
H" F% z" u- ? if(sum==M-1)9 N. @& p0 l" ^9 P# L
break;
) i* h8 F1 q% c' l: s; N p=p->next;
( k7 t1 z5 B& i% U: V }6 r$ E6 U0 v" m( U D5 t- I3 s( t2 n
p=( K7 z7 Z" h$ N, K# I
head;
, l6 f8 q) Y: k/ V$ t for(i=1;i<=M;i++)) @. ~ c: G6 w2 t; C4 ~0 {
{ if(p->flag==1)7 g* D: a- ~1 J4 z0 s) }
printf("\t%d",p->number);
H) C: K; N4 }6 j& Y& ^/ j, ]4 | p=p->next;
' @( P! I) [) ^ }
' F5 i! ~4 V2 O+ T: h1 P
2 y( g j' l1 ^( ]4 b
& s$ x5 ~; g# w |3 D
+ }* x- N1 A+ M- n1 w, ~}
6 y+ {; ]0 d2 D7 l第二种方法:数组
5 q2 G" F( L( X' D#include<stdio.h>
" g; z. {. U% Q& D8 I/ s! |#define M 8
8 ]( T& p/ H. I2 _: dstruct monkey" U1 G' c2 j; ` A/ }
{int number;
9 u' z" o4 V8 x# ^int nextp;
P/ Z3 U- j( o* G" C}link[M+1];, F& D4 x& M) l, d
3 q, T0 V/ C& D$ ~6 R9 h. `
void main()1 K3 _: W! L3 q# O4 `6 d
{int i,count,h;
( Z# V) Q7 {/ J: U. y. i# cfor(i=1;i<=M;i++)" e) K- W' ?8 g* i! v: J
{ if(i==M)
( f. W3 m$ T# F* E o link[i].nextp=1;
: @2 _6 o. D" ]) y5 o: p4 R& [ else
L5 V3 l: A- R4 U5 w: S4 K link[i].nextp=i+1;4 F, K% c* k- ^8 ^5 j% Z
link[i].number=i;
8 S8 }' E6 V# K}. u, A& n: u6 Z: v
printf("\n");
* l7 I' }2 |: ~; ~count=0;; f' S; ?- }, J: P* v6 \
h=M;0 t: d1 o3 b- x! Y
printf("依次退出的猴子: \n");+ Y* {3 |$ H8 g8 D
while(count<M-1)
( c/ v8 @* [, P, |- K: e{i=0;: B2 i6 L L8 U; K" I
while(i!=3); W) T) \5 B$ `
{ h=link[h].nextp;' u: ~5 y2 d. x& Z
if(link[h].number)* C8 E7 G3 I2 K, Y+ A
i++;}
2 e, [5 j! }6 O! t$ P7 y! c
+ M5 j) o: Y/ c4 Z. p" ^# D7 vprintf("%4d",link[h].number);& V5 {; N0 ~# r7 }
link[h].number=0;# I) d* Z+ A6 q) R
count++;3 I" a, d+ _/ u2 {
}% |, Z* J' i6 m7 W1 P+ y L
8 N5 `: B* X- q6 Q9 |8 K1 rprintf("\n大王是:");
0 `9 x* U+ k, U6 `9 [5 ? f for(i=1;i<=M;i++), Z) r- `" f; ^, z; P! C
if(link[i].number)
# }9 ~% g( e8 j) C0 C+ {6 Y printf("%3d\n",link[i].number);& O5 h7 H- D0 X8 C) }* @; z
0 v0 P8 | z" R+ j1 T& Y X1 U3 a+ V! q9 w n& b8 k
} ) S$ N! d2 \% D# _- m+ e
第三种是普通方法for循环
+ k; v* k4 l% Y! ^ S0 v#include<stdio.h>
5 Z( U# V, e8 y0 ~0 s. N t. m' ?0 n, dvoid main()5 H5 h) s2 G: A
{ int i,k,m,n,num[50],q,*p;: {0 V) F0 m& P, ]7 _, w+ g" F* Y
clrscr();
) j, {0 Y4 U% E printf("input number of person: n=");
3 y7 k. x% }) D g# {% B2 y6 w$ B scanf("%d",&n);
# M6 w4 P' W# x% _! y$ w7 Rprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
* H1 h, [* U# w6 M scanf("%d",&q);
0 f/ m: e: s5 S, C% H. R2 t7 c" s6 s p=num;
4 p$ e8 x |( p: `0 { for(i=0;i<n;i++)
4 F7 B* }" A* K *(p+i)=i+1;
4 u! J& R! m- o5 p) n i=0;
& ]2 h$ [* o( p, b; W- J" A1 l0 A0 g k=0;5 R7 D, l# }9 O) M
m=0;
' S. j/ e0 |; ]9 \- v while(m<n-1)# A# r: Q/ T+ V L; \+ s
{if(*(p+i)!=0) k++;
5 K/ x" q) U- i* E if(k==q)3 A7 w" I w( R; K' B, C) q
{ *(p+i)=0;
) E4 a0 d+ }* X k=0;0 ^+ B+ `0 {$ k% Q
m++;& y0 E& }+ L0 f% c" Q/ I+ z
}
+ q7 g# ~: h' T! r( A2 N i++;9 m9 \3 g$ v8 l2 J- D
if(i==n)i=0;! L0 I' R1 h9 I8 K% G
}
% k( O& L0 V" B1 ~4 R while(*p==0)p++;
+ Q9 I; Z, H/ \$ T printf("The last one is NO:%d\n",*p);! w# ^, h0 \5 d& _( w) U
getch(); ?4 K$ c' }7 ]; u# x) F2 a+ p$ C
. S3 u: [' K' r
} |
|