|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!( U+ E" L! z2 V; K8 P# D+ `" U
这几天我在忙着编一个问题,我用了一种方法编出来!
; u5 I, [$ m. c( Q* K: e但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!( h+ {5 a' f! h' N; n
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
9 ]9 n5 ~& H( X6 Y/ X+ k: ^2 ?$ P6 W: W& g; S! V A" l
' ?1 W7 |; z% c% N. k T 题目
# T+ l$ f q7 K$ v$ g山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
# x+ s( s8 _& ~7 z第一种方法:利用循环链表
/ Q+ C, @7 n: d( s# E#include<stdio.h>
4 o; O' N+ E/ g, W* V#include<malloc.h>; j) I6 G+ k5 X) M
#define M 8 //共有8只猴子
& T1 ^- t( W' r4 Q( Q* n; d#define N 3 //数到3只时退出第三只
) I: x5 D' {0 T8 e* dtypedef struct monkey
: E/ d) b- o! O3 ?8 \* E3 U{int number;6 B1 z }, k5 K7 M. q
int flag;
# E) d& `8 x: w7 ]: fstruct monkey* next;
4 `( g, w( Z5 F2 |' U}MONKEY; ^+ F# K- z+ o8 d/ ~
main()
6 [* L [ I: n9 Y{ MONKEY *head=NULL,*p,*s;% r; y6 m6 d! R. m
int i,sum=0,count=0;
" v, e) c/ q T0 Y/ s# z clrscr(); //清屏2 f! b& b1 K+ r7 F3 Y, `4 H1 p& [
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存. y$ N- l% f. |7 J
p->number=1;p->flag=1;! G) f9 z* a" L! l) c5 `6 m% `
p->next=head;
* N7 h1 h% {4 f7 u- w) U. A* s) a X head=p;
+ C: Y1 r( K9 ~' O4 j for(i=2;i<=M;i++): n% i! f! t" ^
{ s=(MONKEY *)malloc(sizeof(MONKEY));
+ ?! y* R# N N: Q1 G# y& }! G9 \ s->number=i;s->flag=1;
( q) k& J# F: T/ p& O0 D s->next=head;; a' n5 s* y( @" b
p->next=s;p=p->next;
$ {- j0 S8 q0 M# P5 Y$ u3 K }
* M5 L9 b- q! d' m' }" c p=head;. Q# |8 E# Z7 U+ T7 m( H# p& @+ `# f k
for(;;)
$ P) i8 m' D' x9 w' l {if(p->flag==1)! F1 P( V8 E. j' U6 P- j
count++;9 O) y% B% G2 N8 H j
if(count==N)- G3 j0 R2 K9 E5 s% b8 t
{p->flag=0;" U% H+ J; ~, c, S
count=0;
3 Z9 |4 X& H& N: u0 Z! k sum++;}
. q: P- Z/ f" M1 ^ if(sum==M-1)0 y- b5 I4 l. x4 s- Q9 R* ]
break;
: V& @ _' p E p=p->next;
2 Q& }' c6 F9 ^) o! e! b$ ~ }
0 v. U1 e/ _7 _. O, ~0 c, Q6 j p=
4 }; }3 ~8 ~% i8 J head;+ ^2 a- g1 s6 F/ t, W
for(i=1;i<=M;i++)
2 k6 e8 C) K" t, i6 Q { if(p->flag==1)
# W7 k) Y$ o1 F% T( g printf("\t%d",p->number);( o6 M- d: g+ m+ T# d, L$ A
p=p->next;
i5 o9 K5 J: } }
7 s9 Q. f8 ]9 Y
* T. _" W: q/ | F a2 d. J0 S
8 U- X4 {8 ^% W+ k) w/ K# p7 p x& P" a/ J9 X9 J
} * K( C2 d) t! [+ Q6 u
第二种方法:数组4 y, d; m& _+ ~( A8 Y
#include<stdio.h>
4 U! e, U2 M' h1 j- X, a#define M 8
, C$ `+ S6 \' H3 X8 }6 `struct monkey
, ]5 N: c4 G0 B' F{int number;* s9 s* O4 ]- x( u, ~7 @
int nextp;
9 H3 r2 H$ p& V. D}link[M+1];
) c1 y0 V: |. E- c6 O9 E# i" e( b% q( R) `
void main()% o% m, H5 o% n7 Y0 ^" ?
{int i,count,h;* X: F" n! p1 q# n& b
for(i=1;i<=M;i++)
- i( d/ o: v) ]! H% w& I6 s9 \6 I{ if(i==M)8 P0 @) Y' U8 O; j
link[i].nextp=1;1 o3 `- ]5 _+ x2 r
else; i- O! s& q& i6 I* Y0 D; J/ t3 B1 Z
link[i].nextp=i+1;
: k8 y8 R0 K) n2 M3 n5 N link[i].number=i;; e! `; F3 N0 z p5 N) R
}; E2 ]7 `8 S6 x# F3 J
printf("\n");
/ S2 `1 _ d9 f9 ]( b- fcount=0;
; O2 _* |4 {7 H7 {0 f/ ? z8 Vh=M;. t% M3 C, K$ U; d3 O6 _' Z- Q
printf("依次退出的猴子: \n");, [" W" V# |' s, w6 o+ R
while(count<M-1)! H' |: o$ b( _6 K7 g, _
{i=0;3 f8 K1 c5 }. o" s
while(i!=3)( n. h' W, M; E* s. b5 _
{ h=link[h].nextp;
6 q! w9 {% a2 z% d6 p if(link[h].number)
# O! v- g+ d% c) R. u i++;}
' B# s8 D2 S4 k0 c, J8 v5 x3 ]! q* M, p- H* H
printf("%4d",link[h].number);
r" J: O, [, [, C# Elink[h].number=0;
1 n1 t, f: Y; A/ @count++;/ X8 Q+ v4 \6 X7 u
}
+ W0 a7 k! o4 {; W9 s/ m: m# J8 M- u( G* u- R, i
printf("\n大王是:");$ q. t1 g! F0 F' O
for(i=1;i<=M;i++)
; X5 ]0 T$ `6 g0 f' Q if(link[i].number)
* I8 z& \# w8 `% ` printf("%3d\n",link[i].number);
" d x) X. | R/ c, P5 G7 d' }# U0 b$ O% S
4 I- ?- n$ T, r9 \" h) Z} 5 b P' b1 G$ h: p% v. y
第三种是普通方法for循环
% ~- z; i: \9 [, g2 g1 a, Z$ _6 Z4 ~#include<stdio.h>
& {5 V& s& P( W+ I' x6 evoid main()
_: \7 f4 {' K# d& S3 c j {{ int i,k,m,n,num[50],q,*p;" `1 O* l( X7 j. T: G- [
clrscr();
3 Q! G' W3 H1 j6 {* s printf("input number of person: n=");
1 D# U+ `' f/ ]% d scanf("%d",&n);% u& i' Z% B( j! x5 `8 M% b
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只4 G) i! D: j+ a: v
scanf("%d",&q);2 P3 |/ E) H5 {+ L O
p=num;
) b* u) H. q! W9 ]0 I for(i=0;i<n;i++)7 d( X- R+ |: h, E& f& V; F& m
*(p+i)=i+1;) b9 Q$ v$ H, Q: n) N. w
i=0;. o) J: ^, N" n: @- U/ W
k=0;
' d0 \ @+ q- n L m=0;/ [6 |3 n* e7 p1 f- L% R, I7 e0 m/ d( B
while(m<n-1)
* B' F; R8 Y L/ K {if(*(p+i)!=0) k++;
" \6 b! n; u8 |) a6 N if(k==q)
0 |& w2 @) L6 _" O, @* s/ M2 [ { *(p+i)=0;
" C( V, z9 q+ L' q8 h- j k=0;! I, K+ R1 w" c: s
m++;6 S1 D& a; @) t$ b `
}- K! u# u. M& Q2 ^' k$ |: a& ?7 s
i++;
- W: W5 M4 e. }, K if(i==n)i=0;
& |+ P- O& j6 v& G( [0 a5 g1 } }
" x0 F; x1 }2 P' b+ Y R- P while(*p==0)p++;* @/ K. ^4 ^- w& |9 f
printf("The last one is NO:%d\n",*p);8 ~) g- A5 v& p" Y1 i9 g$ M! @# F
getch();
% S# O' Y3 O7 c* P( G; \
4 @( w6 s D) J* y} |
|