|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!2 U: n% F e3 E* X: b# |
这几天我在忙着编一个问题,我用了一种方法编出来!
+ d; u0 a/ c, }6 O: j但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!' Y% N2 M8 k, ?# Y: Q
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 8 v: A7 ]1 s3 n' {5 }" s! g# U
8 `/ ? I: b1 k1 t
" `( q! u# a+ P! X/ ~; v
题目 s( D' C4 \* e- P* L
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
: b" u+ _+ j; |# {' Q d0 Q第一种方法:利用循环链表
0 ]& ]. V" w3 [6 F! h#include<stdio.h>7 J, Z$ }) z# @: d# `
#include<malloc.h>& C$ Z5 \( K- C1 o
#define M 8 //共有8只猴子
, w/ |( S( B( A; y7 b) K#define N 3 //数到3只时退出第三只
9 ?& i1 y, L7 U. ]% G6 b9 rtypedef struct monkey2 `5 X6 b4 O% {( x: j
{int number;+ ]+ K" w% w; S
int flag;
- H) T* z e; t2 i1 [9 }4 Zstruct monkey* next;
. I* ]) A) e' X, r: ?% b5 m}MONKEY;
4 G# c9 s, Z8 Y' \. r2 v5 ?main() B+ h" s5 d4 r2 g7 P" y
{ MONKEY *head=NULL,*p,*s; ~$ p! u: [+ x; M
int i,sum=0,count=0;
0 h9 ?$ a; j* ~3 W7 D clrscr(); //清屏
) T- P2 y2 E$ z$ [2 A7 U p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
. Z/ W5 d2 N0 Q( o: H p->number=1;p->flag=1;* X4 d4 f: E0 C
p->next=head;
) W7 V! h* V1 h4 e head=p;) t# N) p5 {6 K$ o) W; G9 E
for(i=2;i<=M;i++)6 J- l& R4 J* B; v9 ]; n/ Z
{ s=(MONKEY *)malloc(sizeof(MONKEY));
5 N, h# `. c5 x' p s->number=i;s->flag=1;) i% R" U: E! K/ k) V% Z9 L
s->next=head;
: k8 { k" [0 d+ r8 l p->next=s;p=p->next;
+ y; X$ [2 A+ q+ } }" d% Y# l. L6 S# X% @: @+ p
p=head;( Y; C4 |7 B6 u8 F3 Q, J: A
for(;;)6 H( |; L, a0 T7 ]5 Z% w, L$ F
{if(p->flag==1)
, l/ o, x0 T1 Y* l0 j count++;" _$ `8 a! B5 C9 X
if(count==N)
3 D! E5 W% \& B: y {p->flag=0;3 t+ ?) J7 [# U: O2 L) I- n# C
count=0;
$ g# [# h; w8 x% H sum++;}( w; E/ X: K8 y2 d
if(sum==M-1)
9 P1 D! L: _: L+ v0 J2 \& k break;' u6 O4 M8 V& Q5 z
p=p->next;
' b. o' _+ A5 Q1 _$ W5 C }( _- X- ]2 Y: I) M) p
p=3 r( [& D8 f) y% H
head;) k# G- ]. F! P9 `7 l
for(i=1;i<=M;i++)
6 F0 o& b( ^! T- b* Z! @ { if(p->flag==1)
; Y' J3 Q$ X# q9 p. b printf("\t%d",p->number);0 C3 J8 v; @/ j0 p4 X P9 N$ U
p=p->next;
' V0 n {& W6 E3 A6 l( L; J }3 O! y$ Q. O& R# g
m1 `: B. T+ i% X- f: p3 F" S! ~: g3 f
9 X7 k8 Z! x, i
}
. u2 J8 U# N! Y& ]第二种方法:数组/ ], s# A, f1 q
#include<stdio.h>" ?& ?# e9 c( z4 m
#define M 8
. |7 |" w( y6 p" H6 d1 e; |+ A5 O$ g2 Hstruct monkey
7 w9 o N" [3 A9 n{int number;% ?* N" O( {8 b9 L
int nextp;
2 K# [& m! c l6 t# B}link[M+1];
* t! t1 O: k, e6 K r9 p
, r- w4 @, {# c5 e/ cvoid main(). @; D& t) o9 h+ s* B( o: ]
{int i,count,h;
1 n2 l v2 x3 B4 }$ j7 d! P' L, ~! Sfor(i=1;i<=M;i++); m j, r9 ?% I8 Q2 N* c
{ if(i==M)
4 ]! |7 n" r" s+ W4 \5 K5 a# B link[i].nextp=1;% o6 p. y) b& C* U. {
else* @4 e: W0 G) s* z, J% G/ b
link[i].nextp=i+1;. ^- Q, q- n# V3 ~
link[i].number=i;$ q& K/ ?) A: _, b: P9 \
}" L6 c! [ W& @
printf("\n");
5 O$ E3 V* d+ ncount=0;
: X0 `9 }& A- F7 B i5 z6 i+ ]- zh=M;
- c5 C% S3 I2 ~! Uprintf("依次退出的猴子: \n");
% }! V8 Y) F4 j8 H( Jwhile(count<M-1)" C. D1 ^' J( ^* g' M
{i=0;* W! z3 n# Z4 y3 R) g# f: R
while(i!=3)' }: ]/ ~6 U" n d( ~, l; z V( }! T
{ h=link[h].nextp;
- j* u. z/ Z9 n6 P if(link[h].number)
+ H( O& O- b0 b i++;}
& T( B) ~. i/ @# ?1 o; a" ?* z6 @5 l% @9 ^6 r! w- x. C
printf("%4d",link[h].number);/ K& U# w- @; ^# v7 R
link[h].number=0;4 M) F3 {& {" C" ?. o
count++;; a* \7 Q6 N$ O Y! p" Q9 I
}
/ @+ ]& Y# ]& f+ T) V
- |: W& s) u- M3 e9 kprintf("\n大王是:");
5 `5 e+ q7 `/ z' F for(i=1;i<=M;i++)
: |4 E% ~: O" w) O$ A2 }7 y if(link[i].number)
8 X" I7 v$ s- J u! I: e0 N printf("%3d\n",link[i].number);
3 X+ v8 d+ M0 H1 o3 ]8 y0 k$ G: n
& }7 |2 i- v5 f' M1 B
; e' x# t P d6 |. w2 M p}
1 J) z5 R- o, \8 W; u第三种是普通方法for循环2 P1 E3 M3 l3 i0 ~
#include<stdio.h>1 ?- X5 }: g3 N! v5 t
void main()
6 f- B& I: Q: l1 F{ int i,k,m,n,num[50],q,*p;
& L# r: }' m- e* s- Z clrscr();( a' K' c A- ^' V! e
printf("input number of person: n=");
. [2 N; X' b* T( ?7 E6 {, m, l" C: N scanf("%d",&n);( H/ `, k6 l& n$ i* G% Y% }3 l$ n
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只& V- F6 f8 g* ?% I1 f- A
scanf("%d",&q);
M' r. ]/ \' M6 I7 ^ p=num;
( ?& A5 Y+ V) o( |3 x# U. g for(i=0;i<n;i++)
9 Z1 X4 u( t0 f1 G1 _' @ *(p+i)=i+1; M P8 } m! M- j Y
i=0;) D1 O: G4 D$ F: u. n4 v( ?3 H0 \# k
k=0;# y" L; Y" F) g% S8 f0 k& P: L1 L+ T
m=0; w2 D4 u0 p4 v4 y( m* \
while(m<n-1)) F+ ? r0 `" o5 |1 G! B1 W1 G
{if(*(p+i)!=0) k++;
. A( m% c4 A- S6 d i( B# @$ t4 Y if(k==q)
% G7 X* F/ ?/ u$ T { *(p+i)=0;; N( P1 o8 Y/ A/ E# y
k=0;9 p: W3 M$ N J0 Z d' l5 L& ?
m++;& L( l0 a3 v3 b7 `$ |5 y) d2 a; e
}( p" U% h% {) C. W" ~& }
i++;
/ d- y$ D9 Y6 h O# O if(i==n)i=0;
- \- G! n F4 _' Q }" e) h6 j, R- e$ d2 o
while(*p==0)p++;- C+ P& }5 D/ b4 U% X
printf("The last one is NO:%d\n",*p);0 v) z" }9 {7 q
getch();/ k- H$ w2 m; @ Z6 E+ A' k
( P: D* H3 \2 k4 i5 g; J& W} |
|