|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好! T" U1 ^# ]- i
这几天我在忙着编一个问题,我用了一种方法编出来!; ?; _0 w" v; e8 |
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!8 Y- ^# G6 P, y2 j
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 & z3 M/ B4 A; A, X7 W5 d) m9 T+ z
2 t$ G- p; m- C6 q1 M' h6 { f
' Q3 J$ D% f$ q9 B 题目
" O, f0 I% f: S2 {3 T' b6 [6 R山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
' Y; X% X# e& h第一种方法:利用循环链表
' f1 a: S$ F/ @7 Z& Y1 O#include<stdio.h>: k6 Z" a; t; r: z
#include<malloc.h>; a" t; \. x: C+ h6 g+ i
#define M 8 //共有8只猴子
$ N* U# d7 L8 J. P1 d#define N 3 //数到3只时退出第三只
' E w8 S1 f9 X% Y" N" i& ntypedef struct monkey: h9 ^ p9 K/ r/ a9 z5 T- B9 ^, Z( B: m
{int number;
/ b0 w! C& H! qint flag;0 E. {9 e: y3 Q+ p( ?8 r% O$ l
struct monkey* next;" K9 [/ L z" t! ^" B j* @
}MONKEY;
3 V. c' i) J. V: Gmain()( L. Y3 ~3 w. a8 u
{ MONKEY *head=NULL,*p,*s;
' f k9 ^2 d. k8 L3 ]5 [4 g int i,sum=0,count=0;2 s; h& r" X5 p. P+ L# X
clrscr(); //清屏
' h& E- R; U1 W! L p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存" q P" C) Z* S0 T5 d4 t5 D
p->number=1;p->flag=1;/ d4 t. C* U0 Z+ \5 v8 t
p->next=head;
4 b v& L/ M% D: ]# G head=p;
5 E7 S% b4 d D for(i=2;i<=M;i++)
4 a+ {) d" i- T/ T5 ^ { s=(MONKEY *)malloc(sizeof(MONKEY));, s4 q0 B2 Z8 `, Z: R V
s->number=i;s->flag=1;
+ N8 L) U% K% A s->next=head;
1 c+ N- a2 k/ l5 _1 w p->next=s;p=p->next;
! U4 r. |4 s5 a }
1 M1 v' m" \4 R0 l+ N/ o p=head;5 p ]/ y( g, { f* h
for(;;)1 t7 R5 X) Z* a* u* N- U. e
{if(p->flag==1)
" X8 m0 @0 v, I0 E0 f1 K1 { count++;5 n+ I& c0 W8 f
if(count==N); B' }5 C. z* N6 B9 n x
{p->flag=0;
+ R7 B8 i& Q! p' s5 Q! ^ count=0;! Z5 y% b& R4 U0 C: F5 I, I
sum++;}
0 p1 l R7 R% v8 U; h if(sum==M-1)9 K) ]% S6 |! a4 o+ W4 O
break;
8 j- T5 M) e; n. P p=p->next;' K4 ^: o$ [" G3 j; ^
} W2 r4 ^5 d- c" k/ P
p=
9 l2 R6 \( x* T9 {1 K; g head;
4 b( K+ H' _0 m9 I% \3 j for(i=1;i<=M;i++)# ]- n6 u8 z( k8 Z/ `/ E; f; `
{ if(p->flag==1)% D! ^1 U1 @2 L6 Z* I1 c1 i
printf("\t%d",p->number);* n9 \9 H- N4 x0 o2 J
p=p->next;( C, h# m- @! m K' H- o s$ [
}% W# t N) V: j; X
4 _% ^/ A4 o1 @2 f. T) g6 s
$ A$ b9 d7 y* t& e
' L+ @# v1 T: {" K/ F* ^" E+ a}
7 [% p/ V( [& {! x5 u第二种方法:数组! Z4 ^+ r0 B) g# |. g' A! u8 V
#include<stdio.h>- \/ R: L. Y8 M2 E8 }
#define M 8
+ A8 [# ?1 I, g+ T k& Hstruct monkey# R* Y; |' d. y& g1 u& x: \5 R% u9 I
{int number;
+ G' N2 u: q7 Fint nextp;! x; i, H4 W, ~$ y: P+ r" y7 ?
}link[M+1];, m$ m2 O. k0 y& ?
+ h+ K$ f! G5 b2 I# a* _4 O
void main()
* P! _9 w( A- ^0 Z0 T* J; m{int i,count,h;4 H0 d! @. @# O9 Q, g
for(i=1;i<=M;i++)) a' _& z2 o' Z3 k3 d- P) j+ k _
{ if(i==M)( Q5 P4 \- k1 Y& V' s3 s7 C
link[i].nextp=1;
; r3 e6 v; }2 u# f9 M( Y9 ~ else
3 o0 H) U/ \6 ]( c9 X link[i].nextp=i+1;
! \/ {. u- [3 q$ [" u2 U! } link[i].number=i;4 S- y2 B7 K+ f; O9 d8 o' q/ Y
}
- g# i$ o7 Q" _0 Q4 S, Q. hprintf("\n");
% u' O* [( v. b! A' V! hcount=0;
/ p$ C# n6 z( `, t; J; Hh=M;
" I9 c3 L# @! b" Tprintf("依次退出的猴子: \n");! l7 B7 R2 ~$ D8 ?1 u4 p; G1 O' F( ~
while(count<M-1)
9 j. m+ R \# w{i=0;: G* z% d' E4 ~6 V
while(i!=3); Q6 ]0 k" d9 v0 x5 Q7 k
{ h=link[h].nextp;
$ y0 U4 \% \% E) N, e if(link[h].number)% K8 E5 K& ]0 k9 u; L
i++;}( q2 T4 x% N3 A% a( u- S( d
) ] ]7 E. u: g8 G, l" z
printf("%4d",link[h].number);
: `. ]* ?6 f3 X0 Nlink[h].number=0;
Z8 l+ m7 N& E/ d; tcount++;0 z3 y% T9 D4 B( X, P8 U4 N" {0 q
}
! t4 i+ d$ \) C @! o$ N
$ i; ]8 {2 W. B; c) ^, {* ~5 K* Dprintf("\n大王是:");
0 K K! s- h ?. I for(i=1;i<=M;i++)
/ P& I C% M$ @0 P4 G: O if(link[i].number)0 H/ g: v3 Y/ J* A& S
printf("%3d\n",link[i].number);9 \! s* t+ ]$ G# @+ A
1 f4 K* t3 C; V) ~$ u
* [, x# N/ D9 ~; B1 F}
- o6 n# U$ Z9 }第三种是普通方法for循环
4 S& v3 ]' b- h9 ~#include<stdio.h>; ~3 K: h5 d5 j- U, Z
void main()
9 x8 W2 s9 L0 [, E6 _{ int i,k,m,n,num[50],q,*p;
6 l) z M. r# H clrscr();& X* h z, i7 a0 A+ ?
printf("input number of person: n=");: F: t6 H: V2 C2 d. \# q
scanf("%d",&n);
; J% `3 C8 A. H- H4 D: Y2 @& Dprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
& F6 h' E6 F @& X: D scanf("%d",&q);" \8 z- Z# @9 Q6 ?, ?7 A5 d- d* y
p=num;/ N" B$ n- N% p" ?: H3 l
for(i=0;i<n;i++)6 g- o$ J5 D9 b) Q- b
*(p+i)=i+1;
$ K m) p0 \, H; L5 M9 A) R i=0;
# M. ~0 T+ k' X k=0;+ r+ o9 [1 e% O$ t
m=0;
6 N. e* O# t0 M: { while(m<n-1)
4 \- e6 \ r5 r$ a* C9 } {if(*(p+i)!=0) k++;2 N- t( l3 Y6 w7 Z! B3 c; x' _
if(k==q)
6 U0 `0 O( {# `- k { *(p+i)=0;% j4 j; G B9 ^7 z
k=0;# g3 D, J& P% w2 E k1 \+ ]1 m8 f
m++;4 j* ^: ] m9 z7 j
}
6 S" s! J! I( i2 Z8 Y( _7 [1 T Q i++;
5 O9 q3 h0 x5 e7 h ]$ M" o4 Y if(i==n)i=0;5 p. ^. v) m. q! w; n; a7 }: B
}
" @9 x7 y- P K$ P) ` while(*p==0)p++;$ M' r2 K5 Z8 t. F& I
printf("The last one is NO:%d\n",*p);
3 D* I; {: b7 |9 q# C6 D/ Q4 N getch(); [' q" ~" [5 ]$ T$ L/ o: U
9 S9 W5 O2 t5 z& P1 v4 I# W
} |
|