|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
! J; n. g9 J+ k8 k7 i2 w这几天我在忙着编一个问题,我用了一种方法编出来!6 o! |3 b7 o: N# z( E( s, b& i& G
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!3 _: x/ v+ j& d) H [
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
" P6 q" l c9 u/ Q+ d z5 R" [
$ n# G4 h* w, }/ r* o/ W2 E, y- C, w& }; H7 R* {6 h9 D6 j
题目 B. f g/ Z3 s, D7 e# S3 [0 e& f
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
' b( M$ F: }4 ~& W9 p4 @! I6 C. U) ?第一种方法:利用循环链表0 H1 l/ k7 B( U6 X' M" f% b3 f) U
#include<stdio.h>
- I* o, H0 y5 C; k. E6 G#include<malloc.h>( a7 u6 h& ^% K3 \+ c$ a
#define M 8 //共有8只猴子
5 M+ C2 H2 s% i. y6 i" Y5 J#define N 3 //数到3只时退出第三只2 [$ J( m6 Z0 @. t* y% z" K
typedef struct monkey
7 Q( _* K3 @ T& o9 v{int number;
& \6 [7 }! ]2 T7 }- o* l9 r3 ?( fint flag;
+ H9 q0 ~# _" T1 n' ]: q- Fstruct monkey* next;
) D* P; {( \0 T3 ]3 @8 d}MONKEY;
! y. n/ J2 \- A+ s' o) {0 imain(): o2 ?) k# {6 Q
{ MONKEY *head=NULL,*p,*s;
2 `) G. H" p5 _' a int i,sum=0,count=0;6 f* w6 w9 ]* |" v! H6 y7 P$ c, }
clrscr(); //清屏$ w" ]$ |+ m' k8 ~8 F% K/ O
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存) z+ q [) c) H8 E0 N+ h% C4 f
p->number=1;p->flag=1;5 j8 o' ^, `) t3 a1 X
p->next=head;5 p! _( X) b) e G, c8 D2 d' D
head=p;+ S# b- \2 Z' F0 l" v3 a
for(i=2;i<=M;i++)
% u4 M, q3 [( h! \: j% S6 U { s=(MONKEY *)malloc(sizeof(MONKEY));. c% R2 f' @* z
s->number=i;s->flag=1;* a9 q: Q% p: _2 N& p V+ G$ @& T
s->next=head;5 E3 i) ]" m$ c. N$ H. b& Y
p->next=s;p=p->next;
3 I" ]6 e' w6 j. b7 n }
* D; n3 t) h: E; p! P$ P p=head;6 I4 y! G4 Q F v$ q
for(;;)
' G) P% L8 V, x( i6 x {if(p->flag==1)
2 S- v. @6 C9 K1 X, @7 h n count++;( _" K% v' S' N. `* l
if(count==N)6 P9 Q! ^9 {, u( t5 g& j! A9 X3 ~
{p->flag=0;
1 h) S8 g7 c& l3 Y0 G0 B! B7 q( M count=0;
+ b/ [7 E: ]2 |0 { sum++;}
! p) k) N4 V- Z+ x: M if(sum==M-1)
Y3 b6 K8 z" E& K. G break;$ S( }/ | b+ ^: f$ h/ `( T
p=p->next;2 _7 e4 Z8 y+ Z7 |
}
* v1 Y8 ^4 U% r p=7 Y- W6 [ `1 A$ X% L1 Q: @1 J1 V
head;
8 v- H6 K; R( z5 l/ }' Q2 \ for(i=1;i<=M;i++)
. }9 X, N+ \" C- I { if(p->flag==1)5 y8 ~1 v" g5 E7 `
printf("\t%d",p->number);
0 O$ j& @+ f" g p=p->next;
# n/ Q* h8 a" M+ M! C8 J, M- z, r8 G7 o }. K8 r2 J9 U5 L0 L. F& P
2 ^% J+ ^5 h9 p. S, _
+ m9 E+ w4 d4 Z/ F @& w8 d5 H7 U2 f% m1 ~3 f
} " d6 }/ D5 m; y$ D2 p0 L1 R; s
第二种方法:数组2 H! l0 j4 w( X6 Y( {6 a2 \5 `
#include<stdio.h># h7 E0 m6 t" B$ l* x! r6 j3 R
#define M 8
; c- T1 E6 Y2 Kstruct monkey
4 f# {1 M$ ^- v% G3 }& X{int number;& ^7 z/ {9 H5 h: V
int nextp;
6 z$ Z* z; f' _' H2 d# j; G}link[M+1];# s8 M& A! C4 j: I6 T( f# m. O
R" }. Q+ s5 o. d/ b9 `$ Q9 e- h
void main(), v6 y9 X8 A" z; W3 F* T$ s5 I& k
{int i,count,h;* J/ ?9 H- }/ |; I/ Z+ f
for(i=1;i<=M;i++)
7 M" s6 K ] `7 E1 ]{ if(i==M)
0 J4 p. M' f; h7 f! S( k# p& | link[i].nextp=1;2 v* n- p+ s9 E) F( T
else$ Q; i# W0 m; y! F% {- z' y+ \$ W: }
link[i].nextp=i+1;
3 `5 c B a7 [2 C link[i].number=i;* \# v* O; u( ?2 k5 R
}
- v- Q. @) Y5 d0 h+ X+ kprintf("\n");
( ^9 x/ t/ {, zcount=0;
! F- D5 d+ o$ r9 t! d4 N; wh=M;9 Y1 y Y; g- p7 }& q n A
printf("依次退出的猴子: \n");' h+ w$ r) j, c7 I" u0 T
while(count<M-1)
m+ j7 D; p/ I4 a1 L8 l7 o0 S5 f{i=0;1 y' r- T# D1 b! _! ]8 W
while(i!=3). N; N9 j; v6 z& K
{ h=link[h].nextp;
1 O& f. T1 Z, P( H I if(link[h].number)
- |8 w H( M* ^ i++;}
! \+ x5 _' J/ Q% d' u, ]& r4 @; O5 l. d% L5 Z
printf("%4d",link[h].number);
R1 Y' f& Z) Wlink[h].number=0;1 O- A- T J- [
count++;
, H# j" s6 R# N- U; R}
: N4 y* S0 O" | y) a6 C+ f3 i6 O" n' g/ v: Z1 {/ R/ ]
printf("\n大王是:");" C: c5 x* c2 }% @: E1 X6 j' z3 V
for(i=1;i<=M;i++)
; M6 f1 h& e( [5 e8 s' f if(link[i].number)$ J) w4 y3 L4 \0 B3 D- T
printf("%3d\n",link[i].number);& `/ m# z6 X. ^! S
0 C9 W2 g) m8 H* ?& w/ l; a& `( P% ?5 W, y7 M2 R- \/ X* I# w( @
}
0 ~: X) t4 ^& c& N! Q- D1 d0 a2 Y第三种是普通方法for循环5 @# ?% \3 G, Z# T, P
#include<stdio.h>+ c0 Q+ c2 n3 X; Q
void main()
1 x) g" i; J4 ?{ int i,k,m,n,num[50],q,*p;) P U& O2 X) Z9 {& A! H
clrscr();
6 h# K/ @ l6 S* {: I printf("input number of person: n=");4 F5 C8 ]. n# G: D! u& x$ S2 |9 }
scanf("%d",&n);) X& w1 b0 Z" d4 x- \1 {( Q
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
' J7 B H0 h, Q8 M scanf("%d",&q);
' u6 X9 [$ D* l/ c p=num;# ~+ ?6 Z9 v4 e1 r2 R. Y! Y
for(i=0;i<n;i++)* J8 R! ] F+ D. j- t( v3 p' q2 u; Y
*(p+i)=i+1;
8 C8 X1 h9 y( v7 h/ b3 @9 f i=0;
. l6 X5 K) Z0 c/ U* k k=0;
2 @3 g; x/ U j5 ]. _ m=0;
# }2 S, Z! `( l6 h while(m<n-1)1 o* |5 J% K& V2 g9 V
{if(*(p+i)!=0) k++;
+ J( ~+ X9 ?- a; ` if(k==q)% r4 a, z3 Y* S/ `! s$ Y) E
{ *(p+i)=0;5 ~0 `$ V6 p) {9 \
k=0;
8 ]" v- J l8 j; A3 i" { m++;
" M8 a! O9 U$ w C }5 G1 q, n1 T! M* B! X# {
i++; P% g$ C9 O& T! E; V1 s0 V3 a [
if(i==n)i=0;
, y" C4 K Q+ h, ^% s0 u8 p4 [ }
* q0 D& ?) S) @# M! b5 @9 S- c while(*p==0)p++;
& ~- R$ ]8 J! f& L% u. Q, j- }+ k printf("The last one is NO:%d\n",*p);4 d7 ?0 y3 g, p/ E" K5 f; T% h- X
getch();# b0 p6 t8 Q9 R) y8 J6 d6 g x
* t. k* p- m) x( `: H} |
|