|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
* K2 r: x- R- r g2 d这几天我在忙着编一个问题,我用了一种方法编出来!0 S8 t# f) F4 W2 {, D0 X
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
# i' e+ |# D9 |0 r: y; v注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 % P9 D' F0 ?9 c6 I/ W- Y+ T
' k+ F( I$ J8 g8 R3 [) }, n7 H) N. c1 |( b1 e
题目( Y' |+ `4 Q" ]5 H7 t* ]
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。! f6 I/ F r7 |: n0 J- V6 V( G
第一种方法:利用循环链表# B" |6 u; ^0 q
#include<stdio.h>' b5 T9 q* W B2 G: o. G
#include<malloc.h>, ~# V/ v8 r# }9 A) p
#define M 8 //共有8只猴子
! G5 i7 v- X4 r& C8 Y6 `+ c#define N 3 //数到3只时退出第三只
) P) J4 F0 F$ |" Y+ h# g+ Mtypedef struct monkey
2 H8 J- D V9 }( r, {5 _{int number;
5 V S9 E- B+ ?/ B1 [/ {int flag;
9 A! F) i* j: |' M9 H. }struct monkey* next;
. |% S) J1 G5 i* S* {6 _}MONKEY;# t, R' e9 y' Y
main()
- I& e3 ]& }. r. K) p1 A) k{ MONKEY *head=NULL,*p,*s;
" s* C3 T }. k& K' V; ^ int i,sum=0,count=0;: `5 m: k8 X7 w% e% c1 Z. ~, w
clrscr(); //清屏 J& R: X2 r+ I( m
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
1 j. h/ X G b8 i) f. E p->number=1;p->flag=1;- T! ?- R9 j c. p7 i3 A7 |! M
p->next=head;3 x+ H6 j. W R# @5 C; U
head=p;5 z! w5 Q: {; P
for(i=2;i<=M;i++)
) g: S9 S% ~: a' y { s=(MONKEY *)malloc(sizeof(MONKEY));
2 [ D: f% Z3 \8 g j) L* j# S s->number=i;s->flag=1;' z! f) e: |% o+ f9 A% i! n1 I% `, I2 ?
s->next=head;% P( @' P, c& d, z
p->next=s;p=p->next;
, i3 x9 W$ J* m; N( s+ a }: J) l2 \3 R7 a$ M) e; d
p=head;
: z6 [1 `. k) }" l2 h for(;;)/ L6 e& ?1 \# a
{if(p->flag==1)% n7 e% _" z1 ~% D
count++;
! S; E4 W; _; M: Y if(count==N)9 R- K; r, p4 ^5 K) L& ?4 Z
{p->flag=0;
6 ^" I* G' ]. n$ P/ k2 p count=0;
! B( \9 |9 k1 q4 a) w# a9 ^ sum++;}
! R, x' S+ |' @# ^7 b1 U: W/ ? if(sum==M-1)2 ~1 X9 ^/ D7 D+ H6 v
break;
; X! k2 X. E1 ^( @! Q- j p=p->next;0 g, \# o- J& F) i
}
) l! `" j% A6 ~' f0 C p=
6 H- W/ A2 l5 G6 D0 D head;2 Y6 C9 O* r2 Y+ b! s
for(i=1;i<=M;i++) P* R: V3 w3 {. J2 [3 C
{ if(p->flag==1)
( w+ K( r% m# A' r( p1 v printf("\t%d",p->number);
5 h# H/ g j2 s8 F- _ p=p->next;
% J& ^4 }3 O! u }
- B/ `/ S3 T* f, x0 v% S; X8 J4 l6 L- }' i5 u1 n( C
- y9 x N& c* i0 Z ^7 v0 B, t5 I6 w' x) X6 ~5 G9 W3 U
} F0 P C" O6 U2 a; r
第二种方法:数组
5 P5 X1 L" g& e, @#include<stdio.h>
* |9 V# E- Z+ Q& |& b#define M 8
) `8 d& |; t3 X2 R6 s4 Gstruct monkey
5 l6 \: A0 c2 O{int number;
( ^- R: s* L: x# o8 ?2 Aint nextp;# w9 I' g% F; a& o1 f
}link[M+1];( P _4 f/ x* t& I
5 V8 ~. K' w' i) l( Y
void main()7 j" g/ T8 k! z7 K9 r0 x
{int i,count,h;- R% n+ l' j. H" [3 B, J
for(i=1;i<=M;i++)
6 C0 ~( s( u8 g1 s. ~3 B{ if(i==M)
) f9 S8 L: e4 M8 b5 n2 s link[i].nextp=1;7 ]; l+ b9 m x5 _( }. R8 j
else
6 {. [& y3 O0 ~6 M link[i].nextp=i+1;# E d7 T5 D8 C3 F
link[i].number=i;
$ D; C [' r, }1 K ~* N}9 @* ^' _+ { H1 q- h6 b
printf("\n");
) \. }( P4 F' V( Y% ncount=0;; T5 \. n# d7 A4 m( B" F
h=M;
5 ]1 ^. `! ~- ?0 u e& S: Hprintf("依次退出的猴子: \n");
" W1 h4 l' n) K# O. kwhile(count<M-1): a$ I6 I$ t4 G
{i=0;% ]. P, v1 l6 z" I+ w
while(i!=3)
0 {& ?- `: t- _" J{ h=link[h].nextp;9 i K& u( n4 |: l6 v5 i
if(link[h].number)
+ Q* q* v& B1 w2 F/ J" s i++;}+ B5 F: x* N. ~. m% e. b
4 U' O/ x! X) h
printf("%4d",link[h].number);0 m# f2 A4 Y8 F& v
link[h].number=0;$ p6 q( K& `% V: V# k; p2 Q+ ~
count++;
* C9 Z1 H" T% T}
9 n% _' Q: |2 ~) V% e6 l1 |# g6 J# N( T
printf("\n大王是:");
. N0 C2 U8 N" \7 S" E" K for(i=1;i<=M;i++)4 c# i" m5 X0 O: b6 K/ R4 S
if(link[i].number), w/ U# X0 ~' K% U) [
printf("%3d\n",link[i].number);
) [. f0 S z3 C2 {' U8 a- J+ h# x# U4 Q% a) I4 ?
) K) z! U& X# F* q
}
' T- g# e, E+ n& o6 o第三种是普通方法for循环
) {3 D7 x7 s F& U* C#include<stdio.h>
, h( I+ _' ?# r2 ~! Jvoid main()! T( N, x8 `5 p Z7 Y
{ int i,k,m,n,num[50],q,*p;+ r- q+ o5 Q) J" k( n- E
clrscr();0 Q6 q# J$ a; l+ ~. R, C/ Y
printf("input number of person: n=");3 k$ ]; k5 g; l2 J
scanf("%d",&n);2 B$ ]5 V+ r5 x! L2 N# t) u
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只( A7 x8 |6 w& Y! ]1 w: S1 t
scanf("%d",&q);- H9 ]' V, j; C7 J$ j
p=num;; }, K% \7 a' P# O5 T
for(i=0;i<n;i++)5 o9 L7 }$ J$ W S; f$ A! n, w' W
*(p+i)=i+1;
6 s( j5 ~" `" ?& d8 M, N l i=0;
4 M( r% T! g8 V G* y k=0;
/ F0 n2 F( a. B m=0;
* p% H0 ` n7 X" t8 N. a* [* u while(m<n-1)
$ X6 \8 T6 b8 `# b. H/ ^/ A/ F {if(*(p+i)!=0) k++;
# Z7 e2 s' c% X6 U7 O5 S. h4 Q if(k==q)
& i2 C, e. o6 |6 ? { *(p+i)=0;
- v- n/ a+ B1 f3 i, o7 \ k=0;6 H. d+ z0 M) i4 t2 ]* l* X
m++;4 } a& E; d9 ]' V F
}
. x$ o+ O' ^6 m* U! e6 d6 d) O) ? i++;4 Q$ {. W# G- n3 K9 l
if(i==n)i=0;
* D7 ^% s' ]5 _) B5 v }
' ]! d; p% a& i1 n while(*p==0)p++;
% }$ }: t7 i. J$ R; W V$ [ printf("The last one is NO:%d\n",*p);& Y' Z8 H. q- A
getch();
/ x# H- u R* j0 q
' s- o6 S. p! b3 Q} |
|