|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!9 V% }( Z& a1 m, f. X) V' N
这几天我在忙着编一个问题,我用了一种方法编出来!
# |2 M0 {8 t9 r6 L2 i2 r但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!& n0 Z/ i m! C# P- H3 [2 A/ w
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 ( b- p( {% _, N0 ?( Z
* [9 D U( x/ u# w3 ?/ u5 F V" N1 w% m4 J }, K
题目
8 V0 ^" z! b' l4 e; ]山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
7 o) K$ E$ [4 n. L& A% J! U第一种方法:利用循环链表
" m# m( p: s* r8 B" z#include<stdio.h>
% ]0 ^) d% p& y" H0 Y, r. ^5 W#include<malloc.h>" \# R3 i6 b2 h6 I- ?
#define M 8 //共有8只猴子2 @/ c; \" I9 s7 Z* a
#define N 3 //数到3只时退出第三只
7 v5 e, L1 X. htypedef struct monkey
& J1 a7 G0 v/ M! f/ O4 c{int number;" c) f5 c' o' \ ], i7 \
int flag;! g2 H& q- {8 p2 H1 @0 c7 d) a, F
struct monkey* next;
! v: Q: ]2 B5 a}MONKEY;
3 \; |* h4 v4 f; E1 K# j- o/ imain()
# R# w2 }% S q4 U) C2 F1 b+ g g W{ MONKEY *head=NULL,*p,*s;
7 }4 C" ~+ J& v6 ^' R7 E. d int i,sum=0,count=0;/ X8 \/ w- r* ?
clrscr(); //清屏 b0 X8 O( u4 Z( Y8 W' i
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存( q5 b. w0 ` {: U( Y+ }" _' K
p->number=1;p->flag=1;% Y4 E9 _5 {2 m4 R' K
p->next=head;
, v/ q4 B8 [7 A- I% v head=p;
: U% v4 ?7 W% H1 E) F for(i=2;i<=M;i++)
! a- g+ i6 v5 N; V { s=(MONKEY *)malloc(sizeof(MONKEY));- c' _ T& Q9 E5 |5 g
s->number=i;s->flag=1;) i. R' f7 N$ Q" c
s->next=head;( V# L3 e! n% t" V+ `+ a
p->next=s;p=p->next;# n, A+ A* A: ^
}
& z% b! R" _1 g! A& f* Q p=head;
/ ?8 Q. m+ T+ G& K, U+ Z for(;;)
( G, M6 }5 N' R- a. k7 I {if(p->flag==1)% v8 W2 S5 r& }9 D
count++;' Z+ v. t! q" l2 d& H$ x$ L
if(count==N)
$ [# U0 }5 ?2 k3 t: l/ s/ h k: M" E {p->flag=0;
- k' [/ ~+ [# x( a' @1 S count=0;* I' h5 m& p8 V# @" h/ U
sum++;}% ^& [1 i) D# Y" h' Q" k
if(sum==M-1)' |% r/ Z+ v ]* L- c' l
break;
" i8 N' Z( d# b p=p->next;
`9 f+ g4 x, H9 q. @ }& F* O" r1 O" M5 l R# b8 M
p=
8 y: ^0 h) p- {. [# U1 \" z head;
`. _- B- T. x4 G for(i=1;i<=M;i++)
6 ?3 w) A- @6 J+ H; y7 `$ m4 t1 u { if(p->flag==1)/ s; x& L% r' Z1 g7 r9 E! r; f
printf("\t%d",p->number);
6 c4 T2 \2 o# H; r3 A9 ?0 D, ] p=p->next;
, b, _* z7 R% R }5 y @: r/ I4 c* j" K6 K0 [
( l2 y! \) t W$ x; W) W
, X# X( |4 L* y2 \% D' o
. ]) ~$ l! O9 s: X3 o8 W& e} / R( E: ?, E$ P" a* Q
第二种方法:数组- k, S/ R3 l) a5 ?3 |
#include<stdio.h>
) g5 ~' T' U1 s6 e4 `( v#define M 8
# K W0 [# ~& Estruct monkey
, x" p$ d* g: ]: ?{int number;
% ^3 Z2 \ ?2 }% x3 f7 I8 gint nextp;
- Q/ I9 \$ J. C" K) i' h}link[M+1];, Y' L7 S+ I: ? y$ I
- X+ v, A! {5 r6 P' E5 r6 M0 `/ Z+ Kvoid main()0 `2 b' }4 f+ {
{int i,count,h;
H, ^: h7 L; i$ J( u6 E6 z0 d0 N- ~for(i=1;i<=M;i++)
2 `' G1 ^3 e! h: z2 z+ z) _{ if(i==M)
4 X3 z4 m0 {7 s" j) F link[i].nextp=1;" a3 g6 I! l3 n* b, z0 c, v
else+ u: e- U* F! `) D
link[i].nextp=i+1;
" i& j9 ?" n- ?( R link[i].number=i;4 m5 _& p: S* Y3 R6 \
}% j& v9 N1 b0 Z
printf("\n");
/ H+ q7 @0 c) D+ }# R3 Scount=0;
4 c6 T8 ^) H; u- ^+ Oh=M;2 h# u) n0 v* D. n# d5 k6 `, }
printf("依次退出的猴子: \n");
! `; g9 {) s3 V6 V, Q# l+ Lwhile(count<M-1)
/ T4 p# t% N" [( v{i=0;
# L, i# G% r4 R6 ywhile(i!=3): E) @0 d2 h5 S i6 ?: l- C( U
{ h=link[h].nextp;2 x/ L" P- c D c$ Y
if(link[h].number)
+ K) e& w! \& s$ ^$ B i++;}& R- v. x6 }( O
}: J, _8 P9 i5 t( k
printf("%4d",link[h].number);
) {3 W* _) F+ h$ V, d% A" A; Tlink[h].number=0;
5 p' [6 w! T' F+ S: Bcount++;6 B- k! f- s, ]& Z. P
}1 `; h+ V' g0 k! d `6 [2 f
5 C/ i" E& t2 h$ z& c
printf("\n大王是:");7 P8 G' K+ d C
for(i=1;i<=M;i++)
9 f( d* p7 M5 B1 \. a3 {( _1 J if(link[i].number)
7 x2 s8 I, n& b printf("%3d\n",link[i].number);
" ], h( J2 A. O" U- T# S2 b! N. i+ t
0 |0 s5 P' |$ R- p0 S4 W8 I* b! {" {) ^8 F% D% J
} % a9 Q4 M7 y8 N0 o4 `: j
第三种是普通方法for循环8 I2 p, \5 Z9 j" S. s5 z
#include<stdio.h>/ J3 Y4 |+ x x+ r- |& E
void main()
: m# y+ J3 H% O1 @! s$ ]% G{ int i,k,m,n,num[50],q,*p;, v; b4 |! o k! q
clrscr();
. V9 ~; f* _) H" F0 b+ d8 F7 x$ h- m printf("input number of person: n=");0 J/ P$ K" z8 Y7 D( t
scanf("%d",&n);$ w$ I* w3 a" v/ m Q& M
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
) g% B! {$ [1 v' m scanf("%d",&q);
* Y8 B% ^ O6 ]5 _ C) t8 [ p=num;
9 W& a. u! M! O) ~! L0 M4 X6 s! ? for(i=0;i<n;i++)0 J F6 N6 [; X- f
*(p+i)=i+1;
5 e6 z% O; I; o2 m3 \ i=0;% B+ P' `. p3 _1 _* y0 f
k=0;: r9 P$ Z3 @) ?; B4 i6 J1 L$ D2 N
m=0;
+ d3 @/ G6 Q3 ~( X1 p while(m<n-1)( n2 e7 v# E8 D9 o" U5 b2 d
{if(*(p+i)!=0) k++;
+ V z6 S. G9 h if(k==q)% m4 u. G0 } d7 w* x
{ *(p+i)=0;
/ j& D9 Z' {8 R4 r% E k=0;+ t W8 D P1 ?& S- S. @; o# E
m++;* K7 ]& ]! g& h5 R. P
}
+ |9 O, L2 {1 W, V+ s. P i++;
# }% r6 K4 j1 J& |5 O if(i==n)i=0;. g' R, r+ F8 D, p
}; p7 n4 [. u& m& }
while(*p==0)p++;8 A" W: C. W' d0 v- I* g
printf("The last one is NO:%d\n",*p);
% l& p8 r" j% q0 I) U getch();
6 G' ?# N0 G4 T9 C* `
6 F3 ^5 a4 S6 q} |
|