|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
×
大家好!
: m! L# A; C$ E: X& v; J, L8 g这几天我在忙着编一个问题,我用了一种方法编出来!! B- N& F! A% x# P
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!) K1 y( j6 M1 E
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 4 r1 \4 m8 F b6 G6 A" A
' a: K" W6 l# v
2 W3 `# V& A6 `+ G; ]6 z K
题目
) d2 b, c( a( ^. {山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
& F! g9 a7 l+ O9 N第一种方法:利用循环链表: u- p8 V& V( y: D; _* j8 Z
#include<stdio.h>: v7 | H5 ^' }- R; c6 W a: D( I
#include<malloc.h>1 N+ y* Y! Z% n+ f
#define M 8 //共有8只猴子! @7 j* D9 y3 Z, d( P- M+ M
#define N 3 //数到3只时退出第三只
0 o% t7 b: A6 ?typedef struct monkey+ s+ T2 y% ~% h, @- l( P. ^; f
{int number;4 e0 m3 _* x2 }& b+ R
int flag;
; }5 s5 ?& P! J5 ^0 F* j. ]struct monkey* next;
7 G# t; [7 [* A3 y5 t$ c}MONKEY;
- x5 Z/ B, l% e, r+ pmain()* B+ L& d j4 v9 `7 H. p1 R
{ MONKEY *head=NULL,*p,*s;
* \' s0 {/ S d& }% E7 I# r/ ? int i,sum=0,count=0;' L2 B6 H; d+ e. E
clrscr(); //清屏
( }! b- W# | t0 ^" L# x p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
' s9 j) s2 b& R) g5 Y( c N5 s p->number=1;p->flag=1;- Y# f+ S: ^; b) L( H) O/ k7 S
p->next=head;
- m; y- ?- l- z9 A head=p;+ b0 i% H: n2 A" `! s" W% D
for(i=2;i<=M;i++)
: F9 J; N* U! { N/ a; I* O { s=(MONKEY *)malloc(sizeof(MONKEY));
! I8 ?+ Y! W% a. j- O s->number=i;s->flag=1; P3 A( [# W. t7 P
s->next=head;
+ c* X8 _1 ?1 |+ k9 @# z p->next=s;p=p->next;
& I! z! q9 N" R, ] }, J7 |% L$ f( D8 @) T0 w+ Q
p=head; D; t: P9 b9 J/ S
for(;;)' { @, F/ x" G, Q
{if(p->flag==1)4 D; y6 T( c3 E" r( d
count++;
/ L: L" N. m. ? if(count==N)2 c9 U3 x( k+ e& ?! i
{p->flag=0;7 Z# T) V: u$ R" [3 ]/ l
count=0;- i8 F, r) l4 U; [! m! y7 z8 X% q9 X
sum++;}
: m2 G: n5 E! X5 z9 d6 Q7 ` if(sum==M-1)& F! X; ~) Z G ~8 ?. v9 {
break;7 `2 B. R f* a4 T' S3 |
p=p->next;
; O; {& g+ u# x }
* x, T; j& h" U: T; Z3 m1 w p=
' T' u& V: L' x* S& @9 n% r' W head;
( d4 U, K8 e: @+ y% h- p- a0 w+ j for(i=1;i<=M;i++)# E$ a1 D& Q! G9 M; R& z
{ if(p->flag==1)7 _$ v( x* ~0 L& H6 w3 ^- \3 b
printf("\t%d",p->number);" q( G7 D6 z2 c5 t
p=p->next;
' Q7 s- V1 Z) f, o' v# z }
% C, O3 {4 M3 i# s! ~: l1 }. [1 v5 K
4 ]8 ]' X4 e: {- z
8 T% b% C: s2 }1 }5 Q5 R: s}
% w& K2 x7 R {2 b. t7 r" }- g2 U, `' u第二种方法:数组
" x- Q' A" h8 x1 E! L7 [#include<stdio.h>$ S% ?1 g3 e6 ~1 \: A
#define M 82 W1 O' I/ T5 B: F2 ^7 g" Z r
struct monkey
( [2 d- J9 n: V( m{int number;8 C) c8 z: v Q; J; Y& a0 z
int nextp; M' V! a, _5 T
}link[M+1];! ?9 ~, r$ @+ A
- A: `7 p, {; l3 T& h% ^, gvoid main()- e/ ~( g* t9 m" V: G
{int i,count,h;: D. ?3 t# y9 |# T) X
for(i=1;i<=M;i++)+ Y" P* E( S6 a
{ if(i==M)4 |* J" }( C$ f! |" i$ h R8 R
link.nextp=1;5 a: M6 A- ~% k: B0 H
else; Q. s, a" c0 L0 ?
link.nextp=i+1;; T) e5 Y1 j Q) k
link.number=i;; X9 V% Y& w( Y) _/ U* c
}1 I3 a' j/ e, g% s7 g: B) ]
printf("\n");
; v. U M/ t' C( Xcount=0;0 ]+ ~1 _8 N5 Y
h=M;
" M1 F$ s% a- F5 W1 vprintf("依次退出的猴子: \n");. ~ C* ?' Y" g: h0 b, h# j
while(count<M-1)
% m* Y+ e( |$ m: v$ v, S) u{i=0;
9 }$ S! Y6 i9 V& ~) B8 Awhile(i!=3)5 x \7 h2 r( f- S @# h
{ h=link[h].nextp;" D" I6 D( w: n8 V; f$ ~) o* F* W! P
if(link[h].number)
2 b! @) W6 \& ]& s i++;}
! o# O- m' o6 T, m8 h9 l. F- N, G: m, ]
printf("%4d",link[h].number);
4 s" s9 Y' ]3 E: |" i9 ^link[h].number=0;
8 V8 \: O; X ~; }) k kcount++;+ X; t! o, z8 Q; M2 I
}( w1 Z+ L6 d) W
2 B1 x/ Z% } ~% g. F1 w
printf("\n大王是:");4 `& Z/ r, ?& w5 V+ e4 Z
for(i=1;i<=M;i++)
2 y) B* I* I1 Y if(link.number)
) m; c h' a" N9 W$ B% X printf("%3d\n",link.number);) `% R+ _; {, p( z
) ?4 b: G9 I& z5 O8 | w
/ \) v: m5 I/ u' x% ^- y
}
, v. S' Y3 n3 \# O% D第三种是普通方法for循环1 U& ]' J3 a8 H0 z2 P, c0 v1 N6 f
#include<stdio.h> ~1 k! ^ Y$ p- J C2 k% u5 @+ T
void main()
3 M8 R! M4 t z9 d9 t{ int i,k,m,n,num[50],q,*p;! ]% ]: w) r8 k; Y8 w
clrscr();
1 J+ o1 z- r7 E9 \ printf("input number of person: n=");% |: N8 E+ O$ P+ a. j- }
scanf("%d",&n);
% [1 J( P1 T& d0 B7 kprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只6 S" z% i5 r( \9 }
scanf("%d",&q);& d6 z) ~0 _5 W# w+ N3 X
p=num;4 W* v0 ~2 K4 E& A7 j
for(i=0;i<n;i++)0 n9 s1 X- k& q2 E3 K6 {
*(p+i)=i+1;
! r \" A' _+ Y/ p- J3 @ i=0;# ?: S. t$ `- T: @2 q) F
k=0;
$ U T8 q9 }* v4 D m=0;3 B4 U. A/ x* L5 v5 J
while(m<n-1)$ k+ s( i$ L P7 F: u: J7 l+ `: B$ W
{if(*(p+i)!=0) k++;6 d9 f" W. @: Y8 }* Q; b \( g
if(k==q)0 q8 c0 H! e) G1 D
{ *(p+i)=0;+ }# n1 x; W' V2 a
k=0;
9 K" F3 s$ I7 Y W* L/ I m++;
0 z% ~& q# i; W# Q, r9 [% J+ [/ H }
4 x$ P% I+ z7 o i++;
; W U. v. {6 J if(i==n)i=0;! t2 W- }8 F% g4 x
}
( F$ \ R0 {& {$ \ while(*p==0)p++;
5 h- x, M- [6 R( j* c/ b) C6 A printf("The last one is NO:%d\n",*p);
- f N5 m) K! o: E/ f* l getch(); m- u) N' {/ l) r
9 d9 u/ O$ d9 S W! z" Z8 y} |
|