|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
9 S9 G7 G1 D& g9 l这几天我在忙着编一个问题,我用了一种方法编出来!! L' _0 x3 k/ X- U- S$ y
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
5 X- P0 C8 R. J# q8 A注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
& C. [$ j8 z' E& Q6 X" d- N
8 B2 ]; J0 @- a# _, s
% ]7 c, j) o$ O3 d, W+ h4 v" ] 题目: V, v' }: _ Z; k
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。" G6 }# H) B) e+ r! e
第一种方法:利用循环链表
( l; L. L: M% Z2 k' |) m1 |* b#include<stdio.h>
# p7 G2 X2 F: L2 q4 k2 E6 y. o) \#include<malloc.h>4 @; y+ n6 e; ]! M& R
#define M 8 //共有8只猴子+ [ R0 p; B' N3 Y, i
#define N 3 //数到3只时退出第三只6 {3 T9 q; \, q7 H5 B, {
typedef struct monkey
, D! o ~0 w8 d4 A{int number;1 w0 t3 R M6 K3 z) x) O
int flag;2 r" C3 w% {) D* _3 a9 n# n
struct monkey* next;0 F `5 j) o& F" z6 R, m
}MONKEY;: f% D& m5 ?' M& i
main(), M) G% U% m# K, C6 K3 J
{ MONKEY *head=NULL,*p,*s;
& d( w c; h3 z2 \" Y' {2 t! S3 o( p int i,sum=0,count=0;! A0 h- S( d. N7 a
clrscr(); //清屏
- p3 W* m% Q y& J% V; t @( Q0 v p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存2 j$ a% D" z C3 _
p->number=1;p->flag=1;" D1 T1 ?% ~7 q R5 V$ a' U: |' M
p->next=head;
0 K1 ~. |, A0 W$ `+ A3 O head=p;1 ^! O+ ^- {/ x& o: h1 w- `1 ` Z, q& H( b
for(i=2;i<=M;i++)
4 ? o: `% i/ B) ^) j& r" Z2 }' ] { s=(MONKEY *)malloc(sizeof(MONKEY));
; y- ^. H% g1 p0 y; z- i s->number=i;s->flag=1;5 I1 ^8 j0 v" R" x+ ~! y
s->next=head;) w5 n! G6 J4 S$ Y
p->next=s;p=p->next;
- s; _2 T0 t3 R) R$ B0 w }7 V0 K4 F) ?2 A3 x
p=head;, y/ E Q) l0 G) i8 ^ X
for(;;), Q$ o! o' `" e6 l* C1 d. i# ]
{if(p->flag==1)/ ]/ A* ]0 z. @
count++;0 E$ ^5 `( r4 V; p
if(count==N)0 I+ m1 I8 @* {2 f9 E% S6 _
{p->flag=0;! q4 H! e" _: b* ~1 p- n
count=0;
8 P% s$ q& |5 [8 Y- | sum++;}
2 W3 l! D% V& w* C. x) n if(sum==M-1)
1 a$ r0 {/ a7 J' f break;3 T/ _& o- f& U$ h) N+ g
p=p->next;
1 V+ X! d: ] `! f+ T7 v }0 Y& m* _. C4 z
p=4 l; Y n$ N+ V& h7 r3 a
head;
: N& t& C J- V; W0 {' [ for(i=1;i<=M;i++)
3 y$ `) t" O6 H8 c4 e { if(p->flag==1)
P% E5 D) m8 } printf("\t%d",p->number);
+ B. T& N* T- [: h! i4 I' r p=p->next;" z( r2 s _! v( z5 M4 A, }
}
2 W& L* L) }( w% u6 _; |$ I2 N- H K4 z% l3 Q& ~$ ~
5 h* [% g9 g' Z1 G& s) m. ~" ]. w
3 j* e' y ~$ g4 g3 Y# ]) S7 L& l}
9 D' E4 B7 Q+ g: }1 n5 i第二种方法:数组9 J9 p# B8 h6 f" M
#include<stdio.h>
. z! y! u% z; ]* S! H#define M 8
6 ^; I/ i6 i& [& u1 G5 N0 kstruct monkey
) ?; L7 e/ ?, x{int number;
; w. \, Z7 Z3 Q' s' H3 v t, nint nextp;
0 g' `6 P D2 r9 [/ U+ i}link[M+1];
) \. `/ L; M7 B/ f: J3 I2 I) q( z0 k) n/ `; v4 m, O
void main(). \# }8 x5 x0 ~
{int i,count,h;
4 ?/ l- t0 c3 S" Z" Lfor(i=1;i<=M;i++)
5 B7 ^& z9 D- W{ if(i==M)
5 W" A: |" V) I4 x" d9 H link[i].nextp=1;1 s0 @/ H- |4 {2 s3 D
else: Z" W0 j9 Q- |, P# W& H
link[i].nextp=i+1;
$ ]- J. Z5 d5 p% r% F link[i].number=i;
; ^7 w a) O. U6 e7 G" J}
3 Y1 x' {4 R N) g3 y) {, tprintf("\n");
& _) k# B5 z, Fcount=0;
' J; `& P: q; d- Fh=M;" t* W, ^! C( f) v$ }2 K
printf("依次退出的猴子: \n");
" E, R* ]* u0 ~% V2 m N2 ^while(count<M-1)
4 f+ u6 [: A. q) p# P4 W2 f) K{i=0;5 P1 w& f1 V$ O$ V) t; x" \& ?8 h
while(i!=3)
9 D+ s) _+ E+ j8 P- {{ h=link[h].nextp;
. Z! x; D( w& O if(link[h].number)
7 U+ v$ M! X8 ?- U i++;}
' S c$ t. q0 G8 D' c' T
2 [$ P3 d9 |' {* X- b; N& Zprintf("%4d",link[h].number);
4 ^5 X0 _* t: Q4 A: vlink[h].number=0;
% t4 D) l3 H' v) W9 r y7 rcount++;
- _ {4 E7 a5 i7 K) V}0 I! R0 g- ^, ~( k. Y
" S6 E6 h3 Z2 z- qprintf("\n大王是:");6 j8 r$ M0 F: A. c
for(i=1;i<=M;i++)3 @$ e. T6 y* d# |8 T& T& [
if(link[i].number)5 v& d, i M7 z, }9 E1 F, t! E
printf("%3d\n",link[i].number);1 A A+ N3 A* M6 X8 Z% I6 H
, n5 ~: b' r% Y, T
1 m$ `+ q4 [8 g( V n: B7 }} . f% Z4 h Y1 n. s1 N. \
第三种是普通方法for循环: f- f3 I6 x* @: G) Q8 d7 ^6 n' R! C
#include<stdio.h>
2 ~: n: u# M# g2 J) Pvoid main()
8 V- f, v( }( a$ W1 U# m{ int i,k,m,n,num[50],q,*p;7 e7 E) u* V' N. S
clrscr();& l9 c$ s4 C7 J) Z
printf("input number of person: n=");4 U" y4 G" I+ p- E: j0 L
scanf("%d",&n); |5 N* Y A: R8 a0 |& z/ ^
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
: _. j" I1 f# L/ i( H% F scanf("%d",&q);5 ? s) ?5 e. v# y
p=num;
& i+ P* F" D& C$ W4 i for(i=0;i<n;i++)( c4 V/ L- q6 |/ r
*(p+i)=i+1;
/ c1 z r9 t5 d( T* R+ a5 w6 J i=0;
0 ?+ h0 j0 y( j& j" y( O* ? k=0;$ ]8 |* M- {" G/ O5 ?, k# S: \
m=0;1 S3 e. m4 ?8 a# c' [ \
while(m<n-1)
h! G1 |+ h; |. w) X1 f! o {if(*(p+i)!=0) k++;
H: \6 a% q, u2 y9 V if(k==q)# C2 j. B" W$ X' t X: S! c" M
{ *(p+i)=0;# q/ T( z$ ]0 P' Z! U/ M7 |( x6 _
k=0;( M& \# G1 q: \8 q$ W
m++;
, y4 A) [; Y; g, x& C3 C) a0 F8 I& k }
l) V8 L& Y, } i++;: Q6 \2 K9 x2 a h+ e0 A% d
if(i==n)i=0;
& F6 U6 U g* }* G4 L% G7 `. w( s }
) y+ |0 d! a1 _; F8 |) Q, Z while(*p==0)p++;
5 a6 b# U/ J3 [2 O; G. ` printf("The last one is NO:%d\n",*p);
0 M" W, D7 S+ s6 `9 T getch();
2 p1 {7 _ ]5 ?5 }6 q! j$ e. I( F& M% a. s
} |
|