|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!5 v% [5 i7 o2 q9 O
这几天我在忙着编一个问题,我用了一种方法编出来!
6 j* B6 G0 R! t% k, R5 ^' X w但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!2 j% S3 M# @/ _7 Q2 H) ?! p
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
9 f) `2 k. v8 |+ H% T
9 f4 y: j0 Y% z0 X. y8 J. ?( R, E, l4 o% k8 c8 T2 O
题目9 z: L" ]1 b, R' X/ }; O
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。' [, k0 U) a' |! t; C( p
第一种方法:利用循环链表
( O$ i8 }+ f* M) [$ B3 G#include<stdio.h>
; `% l! m" R( L2 b; v#include<malloc.h>
# ~ M8 `* ^1 J: G' O2 d$ F. G#define M 8 //共有8只猴子$ M: j& P1 T- @$ V
#define N 3 //数到3只时退出第三只: c: x- X8 Q# d1 B3 m
typedef struct monkey
; ~0 U+ r- z! _3 N+ `* U) s' f{int number;% |; `6 v# L. a4 @ z% z
int flag;5 h6 w c0 o# R* i0 t4 _ m% [$ o, g
struct monkey* next;9 p8 f3 }, W; w; E8 A
}MONKEY;
" T: Y2 B0 Z; |" O+ G& a2 E+ n" vmain()
$ m; W/ F2 L" t5 V- \6 x{ MONKEY *head=NULL,*p,*s;
a6 Z4 u T0 ?# x1 H7 H int i,sum=0,count=0;
T8 D/ R) ]: C0 s: a8 t, m! r clrscr(); //清屏8 }2 l/ n, @1 h- K5 Q# }
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
0 D3 L4 `9 J7 S& X# l% X# Y J p->number=1;p->flag=1;. u {0 C; z5 @
p->next=head;6 O( i1 ?( J8 T* F
head=p;
9 h3 H! v8 H" C' k for(i=2;i<=M;i++)
0 m" o3 t* b2 A. Q: o( f, W' N { s=(MONKEY *)malloc(sizeof(MONKEY));
3 Q& H M, n& }6 [' j" _5 v s->number=i;s->flag=1;( V! S7 ]3 u. x5 O' ^0 k/ ~1 H
s->next=head;, m$ ~) i/ K+ b2 g
p->next=s;p=p->next;
& Y, w7 e2 k6 k9 P }& R# E) w; X9 s i4 f6 K) Z
p=head;: v0 l9 k( e1 m* v9 }! B4 i7 |
for(;;)* V7 o5 [9 D3 E* Z7 S
{if(p->flag==1)
- e- n0 v1 V1 s count++;" K* ^- U$ j( z) N' q
if(count==N)4 i4 ^5 A( B1 K- u1 w" D) [
{p->flag=0;
% Z0 i% L: Q7 V, [ count=0;
0 R0 e9 n# ^2 }* ~1 O& E5 D ], m sum++;}6 Y/ Y0 k v) \. M& K9 R
if(sum==M-1)1 t' A5 X# g4 R
break;
2 d- I3 _, A4 e l( [% w& S, L p=p->next;
1 a" I6 y: a7 K$ _7 M' r }
# \* {4 X* Y! S+ c- f1 i7 Y p=
. }7 T8 I' [8 a- ` head;" Z6 L M& W/ y5 b8 O
for(i=1;i<=M;i++)( J" }/ d: R( G, y# _1 Z
{ if(p->flag==1)
' T- {3 @* t+ d& X1 l3 | printf("\t%d",p->number);! V6 X7 H) C, w3 x" y" ?6 P6 s! P
p=p->next;8 ~ X% D, Q9 T2 R( c
}( @; j7 V9 ^2 p0 i a
+ a4 L( e3 E/ B& _
- u X6 N# h/ b6 ~9 r+ }" C1 {- \
7 |4 D" @ ~5 d7 |1 s9 g* E2 A} * B4 g* p- n" r% ]: J8 M: B$ v1 k3 @
第二种方法:数组
' O) A& U! P: E. J `#include<stdio.h>
1 V6 u8 V- E; j& q) w5 i( N- O1 e' y" \#define M 8
9 h' }" F8 w* astruct monkey
9 X: S% c: H: z' [# K{int number;* d3 `! i, k: g( Z1 t& j* h
int nextp;# j: Z2 M. J7 |& j' a" ^6 l
}link[M+1];
5 |6 @/ ^1 M. C2 K* ^0 c' ^' B5 j2 O" ]0 F
void main()
9 W7 J& r% {$ l5 Q$ X2 m" j{int i,count,h;
q5 S/ G5 Q5 B9 k# @/ K! ?for(i=1;i<=M;i++)
' m2 e1 @8 `6 M' F* W5 p' R! [{ if(i==M)! M# \% @& F- |+ B. ]
link[i].nextp=1;9 _( Y* u; a3 p% s# I
else
& [! j1 B7 ^/ y0 i link[i].nextp=i+1;! j' e& I& F$ o* A$ Y' T0 ~
link[i].number=i; H" t/ }8 `) b1 G: z
}
" M# H# h9 w. c) xprintf("\n");
# ]: w- R, X) Ccount=0;1 Y. Q" Z) E7 S3 V }' h" d3 B
h=M; X) O# P. _; R3 R4 y5 J6 s
printf("依次退出的猴子: \n");( I" |. K* ~! u0 r# K/ c9 E/ W4 p
while(count<M-1) m% B$ _2 X" H' `; ~' o& P
{i=0;
, j1 ^) N7 M1 x$ D4 ~while(i!=3)
- L1 b* c8 J V- e{ h=link[h].nextp;
4 v# D9 [1 w' f7 R7 l! R6 L+ Z3 x if(link[h].number)
( Y9 R/ c/ O6 [$ b3 {5 j i++;}6 \) s9 K0 h! Q3 j7 g* F
: ^% L5 I* f4 G. \
printf("%4d",link[h].number);
, D h: q$ Y7 Q3 y2 zlink[h].number=0;1 C8 E8 H' W: X# ]2 y. y
count++;5 m& O3 G. _$ U' K7 k
}
/ o% e4 X0 P+ h* a8 \6 m- N, S" ?( @. u4 b9 s
printf("\n大王是:");2 n+ p5 e- K' R7 ^
for(i=1;i<=M;i++)
. N# ]% s' J8 O% e j if(link[i].number): c2 _ E% L- ?8 [: ^. K: V5 i
printf("%3d\n",link[i].number);. N. @# u) l# Y! H
) ^# x2 a" {! ?1 X" _- L
4 e" B( e' Q/ t P$ y( a
}
) r% ~ N3 {3 q" V& T& p$ g, r第三种是普通方法for循环
3 h8 q, l/ v1 F5 M#include<stdio.h>% j9 a: G" F, z1 c/ z
void main()
4 O: D j t$ C9 g8 y u: b{ int i,k,m,n,num[50],q,*p;
6 S" G4 x# r% M clrscr();
& L- ~1 {: _( J1 c5 a- f$ \ printf("input number of person: n=");
% }/ _ m9 z3 E6 h/ z scanf("%d",&n);
2 L# \7 @7 ~" a" n' Y' Lprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
+ K" h. `9 O) M$ _ scanf("%d",&q);; \ @" }& L' |# @1 h. a& j
p=num;
2 C- r0 ?& O) `6 @$ @; Z Q for(i=0;i<n;i++)4 C7 B4 H' m# e
*(p+i)=i+1;5 d+ ?7 j! n, R7 t
i=0;
0 J# \7 Y* l- J6 q8 A6 h3 A k=0;
! o" O- G& J$ @: ?. R3 I* G m=0;
. B" A8 j! R2 r8 W2 |$ P, z h while(m<n-1)
% L+ h7 T8 c3 O% Z* C: f {if(*(p+i)!=0) k++;
7 y$ @; F# R9 X+ `, m, c9 j+ C if(k==q)
8 `8 o! c, R' @1 J A { *(p+i)=0;* a M y0 e: ~9 @8 U9 C3 u
k=0;$ C7 a: g* _9 F) M$ m: X2 Z' Y
m++;+ s6 C9 b! S0 H# D1 B
}( U+ T$ F# K7 [4 e0 D; P8 ^
i++;' \4 g+ [+ Q s0 p* i. m; H
if(i==n)i=0;
7 p# Y% i) [9 G, | }! P* g6 P. @4 e& o" B9 W3 F
while(*p==0)p++;
P t% F! s d3 J, ^& J printf("The last one is NO:%d\n",*p);3 S* \* U7 |! |) C1 [
getch();
6 g- W3 V- c9 I1 V: _# M9 Z+ g" T+ A! N. @9 @
} |
|