|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
+ y% c) S0 Y) D% O. |* [, s这几天我在忙着编一个问题,我用了一种方法编出来!
& _% G' e7 l/ c U但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!" L1 g! a& b1 F; S
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
& B, n3 _5 p7 }( |
) u; L+ O5 Q. M2 o" E% `+ K
; F, U1 x# Z2 J 题目
# {5 \8 G# m2 G; q. ~1 S; t' q2 E( |山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。; I% M- k9 m& v/ {4 R
第一种方法:利用循环链表
: u @# X9 S5 m( H$ y2 ~ v2 m#include<stdio.h>3 V8 ]+ ^6 o# V3 h8 Q. V
#include<malloc.h>2 `& ?% H" q2 G! x8 \0 @
#define M 8 //共有8只猴子
$ s4 p8 _# a* L. l" R4 ?#define N 3 //数到3只时退出第三只
* W3 [; E8 x( d8 O- j, {: W& E9 a, c5 gtypedef struct monkey" P) j8 v7 J! R
{int number;& I, y/ n! ^$ D
int flag;. O$ N" _# C. v3 |2 m0 a
struct monkey* next;
' c. i% Q# k1 u# |/ m- i}MONKEY;
6 k' n) F4 Y! J1 c$ c: ~( O6 r8 nmain()
, _3 j4 _ R3 d8 u7 A) g6 o% a/ D{ MONKEY *head=NULL,*p,*s;
( K: u- G' D( f: E6 U# B6 } int i,sum=0,count=0;. h% j( w5 n x+ L$ |- X
clrscr(); //清屏6 Y+ B Q2 `8 d F& K
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存2 h$ X% @ u( }7 i* U4 x
p->number=1;p->flag=1;0 d) }5 l, S: G) L: E8 M$ [
p->next=head;7 w2 |( |" h. X x4 L
head=p;4 \: ^% M: Y" U; k! W9 g
for(i=2;i<=M;i++)
$ I# K& Y. ~9 T9 I4 U0 J9 D' R0 K { s=(MONKEY *)malloc(sizeof(MONKEY));
1 E6 ?8 {; M& t- f6 s s->number=i;s->flag=1;
|2 p1 M. \' i8 y' y0 Z% \ s->next=head;& A' N7 H; B7 G; A% S
p->next=s;p=p->next;. ~; R" L/ w& z, u [( H
}+ f# t& U6 j6 s1 F! d7 U, b
p=head;
4 I: K' Y6 Q' q: Q* _7 ]- D5 I; ` for(;;)
5 V2 o/ d. m2 \+ c {if(p->flag==1)3 G/ v% T. o3 N& H0 D8 x2 @( a
count++;! q" F* u4 y C7 R0 s
if(count==N)8 o; j) Z. c& x5 L Y5 i
{p->flag=0;
/ z: P {: ^: u% \- V count=0;# T, _$ z# ]) j* L% ]- ^! q' z
sum++;}
8 p% q6 T; }. T4 `, g5 r if(sum==M-1), b$ V- t G: X- Y6 H# A. [
break;; R2 l8 J* s* Y. [/ \( R
p=p->next;
* V! U- R! A9 s }
7 w& g7 f) Q0 n0 \. N p=
`; \) Y* b; C B3 j0 D head;
9 |5 K! K5 Q$ R( `3 W9 n for(i=1;i<=M;i++)
% S9 ?9 ~# F6 w5 O* q! n% h" V. h% p { if(p->flag==1)
; a8 w- m3 T+ J4 r! r% ? printf("\t%d",p->number);
1 ?- P1 ^ F5 }2 K& \. B4 R p=p->next;# \8 G0 _5 G4 S6 j
}8 k* o0 }9 G% b4 o
' `- [1 q% J5 X: `6 H7 l
L* s( T" r1 s3 ~, X
! d: ]/ K! j) I2 J}
- }$ w: I0 @+ q! P+ `2 C第二种方法:数组
/ w( s1 u: `5 c7 O. X+ f% ]1 B6 [8 Z#include<stdio.h>
& i) f; ~/ G! O#define M 87 \' A) F- c! e- p* [+ Q( t4 t
struct monkey
B: ~% ~& @7 R% Y- X{int number;9 V2 m0 m0 ]( d% [* F- p" g9 ?5 }4 ?
int nextp;
. z. s' s/ M0 ]& _( [}link[M+1];2 x6 A) Y0 h6 f/ k( M( l
& x* H/ k5 z0 x5 B7 M6 x
void main()) T+ b- ?% N) m
{int i,count,h;) D9 G2 V- K1 U" }
for(i=1;i<=M;i++)
8 s9 K, U" B, ^- v9 D+ c* q) x{ if(i==M)
5 y& z" C2 g$ O4 k" ] link.nextp=1;
) ~' o# Q' T+ B4 l! b; s" g else
* E! r5 P1 w' x link.nextp=i+1;
1 J9 }7 k6 `' b: k) | link.number=i;
& d, _$ S+ u1 H! ^) r+ a}! J: `6 g3 o% j
printf("\n");; N1 [2 t ^" c: E5 T
count=0;
6 ?- ?* o* i' j/ X# k9 oh=M;
, I! Q& f3 \9 ?" e1 B' ^printf("依次退出的猴子: \n");
. s* i5 s( Z1 Z# i, Mwhile(count<M-1)- m( @' K m$ {0 A/ e6 X' [8 V
{i=0;
9 O$ Y( }8 C L9 uwhile(i!=3)
9 {6 a6 a8 W& \5 U& B' [4 I7 a9 P4 @{ h=link[h].nextp; A/ s7 Q1 i x( r0 f1 Z& g8 Z
if(link[h].number)2 y0 c5 i# A2 }( M
i++;}
; }' s+ @8 `6 ~2 K8 A6 r# j
$ T0 ~1 S+ m5 _1 h# Qprintf("%4d",link[h].number);# f: ^/ Q$ ^/ d
link[h].number=0;( r3 U" l }" i4 G
count++;. [9 a8 @* K i- P
} G) q9 l! z7 j; d, o% r
* Q% z) a6 j9 f; ^ A
printf("\n大王是:");' O q, w/ s% E0 k
for(i=1;i<=M;i++)8 E, n* C3 Q& h5 C h
if(link.number)
6 W( a ?! x }4 t- z; I w: b printf("%3d\n",link.number);1 u0 I% M3 d1 A3 t) T3 j" l' s
( {2 h3 @( x% ]- j5 `4 ^, Z! t; `
0 b' z1 e: I, d! f/ o} ! V8 B$ ? b8 s
第三种是普通方法for循环$ R. t. {2 y% K6 e) [
#include<stdio.h>$ m$ O% N; L4 b" v7 q1 H" ~* A4 k" |
void main()
* m! s9 e6 q% ~7 x; z) r |{ int i,k,m,n,num[50],q,*p;
& W( }; O) L" J clrscr();, l& {& W) w5 S$ \7 ]# R/ ]
printf("input number of person: n=");
) C0 i- H! c' @" c scanf("%d",&n);
6 M& H e+ v0 W1 N2 eprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
( z; K( Q& n+ e6 g6 Q" v scanf("%d",&q);- T# ^+ n B4 S+ h/ i
p=num;" p# e9 h3 [( }4 M0 ?7 C
for(i=0;i<n;i++)7 s- Q" ] l- H: h: D0 q; e
*(p+i)=i+1;
) G% }. m3 A. A$ `* X( f& i i=0;) o1 C4 ~! p+ b m; w
k=0;4 x( v- |$ ^* L$ j
m=0;8 e4 `+ K/ M) Q: E# J$ j
while(m<n-1)
1 Y, D8 N7 p. @$ V {if(*(p+i)!=0) k++;0 {5 J' k& S0 n7 Z
if(k==q)
! D% }% c6 @; g% T8 i { *(p+i)=0;0 R5 d# t- n' q# A C$ Q5 g
k=0;; v- h- Y6 V1 O
m++;
- M, L( A- d0 |: ?9 o$ l8 j# H9 N } k* R* n2 G" }' Q7 d, R
i++;
8 z- I3 T- R: S/ u3 G ^+ Q if(i==n)i=0;
- @- L9 A" T& x4 I& b7 W }- v5 p) E0 H; ~- \5 I/ \
while(*p==0)p++;
8 C' O; e0 v9 l& w8 a* W printf("The last one is NO:%d\n",*p); c. _1 D' [ L
getch();
& M) Q+ ?) o* G3 n
) Z% h9 u6 C8 @( Y/ F8 _2 h} |
|