|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
% |6 B7 }% _9 t+ X- j/ C这几天我在忙着编一个问题,我用了一种方法编出来!
& i( c8 I; _ n& `1 Y0 u0 H但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!; i5 b8 @. \& V6 h: W
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
' d. J7 n9 O, {0 k4 ~) [+ U/ ^" a" O( ^0 Q( u3 T( N3 z
. h% @2 ]8 K% P3 j1 C
题目
m) i1 [ e% W山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。6 `3 u7 Y# Y( x% b1 M! m
第一种方法:利用循环链表: u" \3 W2 E: ?( [' U
#include<stdio.h>4 e8 b# ^9 q& c/ Q5 {2 h/ s; r
#include<malloc.h>
' G! t% n! g( M0 c#define M 8 //共有8只猴子3 s) B. R, i/ `( }$ R) P/ D' ]
#define N 3 //数到3只时退出第三只
: `' ~! ^9 _7 t$ ?typedef struct monkey
+ ~& s. K5 E8 R: S# a% ~' ~0 Q{int number;
- O2 c4 w+ l- h7 y( S: Fint flag;
, w. t, ]. c1 w) C$ D' Xstruct monkey* next;
3 n" I3 h# @2 I4 X8 u" B6 o! M& t}MONKEY;# Y2 c- O/ e7 x4 p" o) o, O8 [7 ~
main()
! c- R& n0 K* @* }: ?{ MONKEY *head=NULL,*p,*s;
0 q) S- d2 @: N1 b6 e int i,sum=0,count=0;
F3 L9 Q9 w( k- t& o+ F: H# O$ w( W& t clrscr(); //清屏: ?6 D8 e: _3 H; `8 t5 b; ]# `% ~
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
& G- o0 d. y$ w1 H p->number=1;p->flag=1;1 X+ G( _* b0 F c+ a
p->next=head;+ [9 K4 k- e9 K- b/ ~/ Q# `( k
head=p;7 s( e& y) X" @, Z9 a
for(i=2;i<=M;i++)9 w" G, i/ u9 ]8 N: u2 P& Q: Y% g
{ s=(MONKEY *)malloc(sizeof(MONKEY));
( l5 n8 @6 U* O6 x4 K0 P1 Z s->number=i;s->flag=1;
b2 G$ s/ l7 f( c& X. i s->next=head; R3 H" O" F% a2 L9 p2 A
p->next=s;p=p->next;
9 `+ e( N- i2 @2 p, Z: d; a: l2 H }3 X) y' d+ ~& ~% l8 N3 j
p=head;( L2 T0 ~3 U7 Z3 ^. Q9 s. s0 A3 I+ w
for(;;)) N# V9 d0 t- U4 h6 t, o
{if(p->flag==1)
2 p) R& Y9 B( d2 A* K( I count++;8 a f% r& D) V8 V* Z: N) _ ^$ ?
if(count==N)
# B' t* z* N @ {p->flag=0;' V, o: l% m( ~- T' g( q+ v5 o3 x
count=0;& D, C* |' s: X' i* ?! R0 A$ @$ B! d" r
sum++;}" E1 r* r9 R( l
if(sum==M-1)
& y8 y" G* M) K: K0 L break;: |1 }& Q5 O/ X7 }2 |( c- b
p=p->next;7 \0 H1 N8 z, }- o, {* n' X7 f
}! L$ v5 W$ o, S$ B( M
p=
7 I1 y% ]) Z6 B4 W8 {: d9 Q head;
5 z0 c) R) ]- d8 W! Q% U for(i=1;i<=M;i++): p1 X$ L. Z, t: ]* d
{ if(p->flag==1)6 \$ Z6 Y7 [. c. H" }5 R
printf("\t%d",p->number);
' t J- H& t. Y: e. D N* \4 C* u p=p->next;
! I7 u. Z9 L; L& T6 ? T# | }6 r0 E6 e3 R& u. Q4 N. F
( I2 {! t4 j- _; O9 ]
. X1 {. e- s9 M2 F: F: h- T' L- [$ `6 _
} % |' Q# ~9 g" o* X/ B4 [( O/ P. }
第二种方法:数组8 I6 M. }- R8 s' m
#include<stdio.h>
- ~" b' s* H' H+ l' ~#define M 8
6 p8 `- F/ x) C# |struct monkey F$ N3 {( a& p: {' {
{int number;
# Q0 ~. _, E' O& e( C& aint nextp;6 F( V+ {0 |* P+ N% M
}link[M+1];
. @2 k, J- S/ H. o7 A9 p, B. D* l/ U; W1 p% p' F7 @' r
void main()) V9 Q; ], N9 l2 b/ z! l) s! L) ~9 a
{int i,count,h;
$ l$ z" V8 E( Y! Q) Qfor(i=1;i<=M;i++)0 y6 s" M8 _0 B! m( v; e B
{ if(i==M)
. Z- [+ m, Q5 u6 V5 m" u' A+ F: W link[i].nextp=1;6 o+ k4 [! N/ i" W! `9 l# }
else' w. |. v* I+ y0 K; Z1 Z* ]3 j
link[i].nextp=i+1;
3 j! f' g7 g6 |" X0 {. C: ^ link[i].number=i;
% N# K4 ^" m5 [! r2 s" G, _( G# x6 i}
: ]. Z4 c9 F. Y& Fprintf("\n");
4 U% x$ _9 `/ z/ l, u# dcount=0;0 x$ y4 G3 l# S! A
h=M;9 [' @1 V" i: j* M+ O- G! h
printf("依次退出的猴子: \n");( |% Y3 ]9 K4 S/ A' y) E3 V
while(count<M-1)7 j$ p5 e0 K: a
{i=0;. o$ Z0 v4 c, ]3 A* @8 B
while(i!=3)+ W: }7 a6 f3 I9 [
{ h=link[h].nextp;7 V4 W' ]' |& P
if(link[h].number)
8 y* X' g: H% L$ i! V i++;}
8 D, w$ t+ m& w r R. L$ b, z$ q* V% @9 z
printf("%4d",link[h].number);
7 V+ V# M$ n$ K( `link[h].number=0;
/ }5 I) `) d) q( qcount++;
7 K1 b, C3 \4 U- ^ t- c}
: H0 [2 Y# ~; H8 ]0 V
+ ]" X; `* A5 {% f; }printf("\n大王是:");
' |4 T( Y8 `% Y for(i=1;i<=M;i++)
! Y8 b+ U( n. N' b9 B/ X) u9 P if(link[i].number). S/ }9 k9 U3 `! `3 P D4 `
printf("%3d\n",link[i].number);
' n( |2 E3 g" l) V) l+ n% Z' k# D- v4 e2 f2 s/ L
5 ] @) m$ z2 v6 f& T}
0 S% j9 h0 }! y3 F5 @第三种是普通方法for循环$ y# @. O7 Y# D; |8 h m5 O" U- t ^! x
#include<stdio.h>; x, {2 q+ V. I- h0 v1 M9 n2 P
void main()+ o$ K- X% Z/ {" Q7 i
{ int i,k,m,n,num[50],q,*p;) z4 }# f5 K9 [, ]4 i/ k) {& K3 G
clrscr();5 S8 R _2 B1 F
printf("input number of person: n=");/ ]. q e/ P, T a) i: l
scanf("%d",&n);
& B; S b# x; q0 A+ j/ y; Sprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
7 i7 r0 U) k6 d$ ?' s! ^& {, N scanf("%d",&q);
* ]& u- D/ K( E6 b6 ~6 | p=num;
3 a l- T7 ~+ U9 e& ~. H for(i=0;i<n;i++)
; `) W8 U+ }% G6 v6 F- K; _ | *(p+i)=i+1;( }$ V$ w/ |+ G0 \$ c$ q
i=0;# z# d+ i7 u3 A3 b# e
k=0;4 v, Q) T! I- a' K9 f+ M3 k% V# w
m=0;$ }7 v0 s4 A- M
while(m<n-1)
0 R6 h9 M V9 v$ J( A8 O* O1 c; u {if(*(p+i)!=0) k++;
! I4 @7 r& F' |3 o; ] if(k==q)' J: R1 a# y D: u5 W3 C, X& G; A
{ *(p+i)=0;
. i& W5 q! a$ p0 X" J5 F5 V! H; v k=0;
4 e$ _/ M! w& w \5 {+ |( a5 P m++;5 I! h9 o; X0 K; d5 w
}
# S$ t o7 Z5 |% b8 ]3 Q i++;7 b; V( U2 j- t* a3 p
if(i==n)i=0;
9 M9 |* h8 s0 i* h b }9 [1 [9 J5 i: W; _' F
while(*p==0)p++;7 s9 U; [, G- |
printf("The last one is NO:%d\n",*p);
1 m. t2 q& G! h2 s getch();( v1 S* z) \8 i$ P2 f
) N+ \% ^0 ~, X1 Q6 r6 y4 u/ ^0 |
} |
|