|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
$ i9 Z8 ~8 k6 o; w这几天我在忙着编一个问题,我用了一种方法编出来!; @- g( D" I" T
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!( h! F7 M* r# v3 g
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 . e5 V# o6 f8 {: h3 v
$ Y; N9 ?3 Q% E, x9 S! Z8 B
& `& ~) d- S8 c! q6 g( h 题目; z) o( I, r ?2 u( _
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。. u1 M5 q8 Q& e7 e( k
第一种方法:利用循环链表( W1 o9 a' j! q
#include<stdio.h>9 P7 W* ~9 D, `: @6 z5 g# y# V
#include<malloc.h>) |6 K- S0 E7 W P& u2 t; L2 }
#define M 8 //共有8只猴子! c( [( l- o7 C) v% {+ J% M
#define N 3 //数到3只时退出第三只0 K$ e8 z# E) d. m8 m) L1 y0 L
typedef struct monkey, q7 w2 V( }0 I
{int number;
& z) w x: {$ W& m! n7 Vint flag;
2 p; q/ X* ?# n6 Rstruct monkey* next;7 d1 @, Y1 }8 n2 @$ Q N0 P" X
}MONKEY;
# u b. Z4 U8 e" Imain()
5 L% E8 P3 M9 {3 y- i2 n' K{ MONKEY *head=NULL,*p,*s;
6 V6 x9 s, H5 F$ l2 u A int i,sum=0,count=0;, G( O, \- u2 m: U
clrscr(); //清屏( B) E, ~4 ]% p' {
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存) _( T8 Z6 U! R/ y9 k! }
p->number=1;p->flag=1;
9 G' d/ @* M4 Z* `" ] p->next=head;
0 L5 B8 ^3 O$ U/ Y( g! a head=p;' U: \+ ?" J2 l9 h/ M! E" B, ]7 n
for(i=2;i<=M;i++)/ s! R; _/ O. j. Y* M0 g
{ s=(MONKEY *)malloc(sizeof(MONKEY));
1 l; M+ M: \) M; A& X% M s->number=i;s->flag=1;
, l, @; z+ q9 E. _, K s->next=head;
( U- b$ ]7 C8 J; n; m6 V+ Y p->next=s;p=p->next;
, S4 a; r# ~0 R, P }
2 ^* r3 y6 | s; p p=head;% A7 R/ A: p: H# _
for(;;)
+ {/ c& [" ]8 W4 ~7 O; ` {if(p->flag==1)2 {7 j, W, n; Q3 [% q* ?
count++;
/ r5 A3 j; t/ L2 f if(count==N)
( ^( C& Q' }+ O! U {p->flag=0;6 [) J2 r8 p" v5 n# \0 [$ O8 M
count=0;
9 a3 |+ M! r# O1 [7 x! v" U sum++;}( U4 E [ y5 E! O' r+ j) F: T4 I
if(sum==M-1)
% Y3 d$ S) M/ A u; a break;) k) Q8 H1 P: q- g# D( T
p=p->next;
2 u8 u2 s) \& w, G3 @: N' w! ~ }4 \( W6 `0 { w
p=# ^$ D/ `6 M" e% ^* J. i3 R+ |$ A' K
head;
& ?. ^. p+ i) n" t0 s+ P& O for(i=1;i<=M;i++), T. n. S& a# u9 H5 l: E- e
{ if(p->flag==1)* f. U1 e) f$ \) P+ v6 L( I8 |
printf("\t%d",p->number);
" T- @1 i- {8 ]% P+ H2 M p=p->next;
T* F- {8 z3 Y* r0 A }7 w9 u4 |9 |# L8 r0 {& G/ N4 W6 o
. p. U, i' ~8 ~8 Q
; p7 X( N; o; d- W; z6 X
2 k7 W- U W+ Q/ q}
/ \; `. _+ a& o第二种方法:数组; o( w) X" `- |. L
#include<stdio.h>$ K% S6 O! P4 i1 j4 y# s6 O
#define M 8" q, f) ~2 U v' B) E: V
struct monkey- S' Z3 P' }% T$ T, s
{int number;
+ ]* k# w. o% g4 p l8 Cint nextp;8 h8 }; t9 b+ S' E0 V J; C8 L
}link[M+1];3 h' @0 j4 p8 i8 V+ g# {6 f
( J" I* M) C4 Y. W/ j) b/ M4 ], N& y
void main()
& b1 m2 r% K+ V0 P4 t{int i,count,h;) R1 O$ J; f8 B/ x
for(i=1;i<=M;i++)
$ z" _: ]: a& I: E{ if(i==M)
/ u) G0 v$ s. C/ M8 q0 O+ k6 U6 ] link[i].nextp=1;$ U$ P" C( X/ Q8 s% \
else
4 e! R; }0 I; j+ K4 m. m link[i].nextp=i+1;
- u& z7 f6 \' Y, v; w link[i].number=i;. H0 O# r$ N! O) ?' y! o
}
1 m* j: N$ @ o5 hprintf("\n");
- B+ r) V, r( |# W/ [6 _6 fcount=0;
& K0 a" R& f8 ^$ u$ o& R1 G5 U& s' ch=M;5 Z8 Y Q0 z1 k# \1 i( D. ]
printf("依次退出的猴子: \n");
6 M) a1 \6 Z+ y: E( A1 @while(count<M-1)6 L! N# [& }- Y0 Z
{i=0;+ e/ K9 T. r3 {/ ?: r
while(i!=3)! m8 {# e' P* `
{ h=link[h].nextp;
6 I: k" J7 Z, @9 x! R/ N/ A* z( L if(link[h].number)
! S% s% q C/ R( C! g# c# a# @ i++;}- q! I2 l$ i+ Q' t6 \) t2 l/ n
% b8 z% z: B% g/ q) i$ Q. M
printf("%4d",link[h].number);9 W8 S& w+ D* Q* t0 [
link[h].number=0;
$ t X6 x1 @! J0 v! Z) Kcount++;# I% j( t& y9 I% D" P
}
1 B* p7 Q' H; E' g) L, Q6 L7 `
# W; l; N8 A& a) X: l. {4 Cprintf("\n大王是:");
! N6 m! ?- t. A$ A+ q for(i=1;i<=M;i++)- [! a0 ~9 P7 L; `' L
if(link[i].number): [1 v8 o P( ?, P& b. l
printf("%3d\n",link[i].number);
: k* m# C/ m3 u, @$ u5 r6 I5 E; r! E- O/ \: g
7 y1 c4 X6 _- Z" \5 m. ?1 c6 f2 w
} ; E, u1 z3 F0 Q0 L2 B
第三种是普通方法for循环
/ @# Y: i- `# `# {- I7 A' X0 C3 a#include<stdio.h>
1 Z/ k) x. H1 d. w4 n6 j: \* g0 Fvoid main()
. m1 e) u4 d$ @5 Y7 l{ int i,k,m,n,num[50],q,*p;
% {8 @! _8 C5 p5 D, d: h clrscr();1 b+ ?& P l$ L# ]
printf("input number of person: n=");& n, b( i# B+ Z5 I2 k1 M& L
scanf("%d",&n);2 \, \1 S1 [8 X3 I7 M4 G
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
q) a% ^# D1 @ scanf("%d",&q);
$ W X- j, p4 ^% k* V% }2 P p=num;
7 A. [) o: l3 C+ [+ G for(i=0;i<n;i++)
1 d" K6 I5 N4 }4 {3 l2 M& H* O *(p+i)=i+1;
* c: a/ T0 \& h( |/ }. s i=0;9 L5 i. X( {2 O) n$ f- B
k=0;
* |5 U/ m2 S+ C% _, o m=0;3 ^# T( b+ ]5 \7 o4 K+ N' V
while(m<n-1)
; m6 a; A- A: N9 X J {if(*(p+i)!=0) k++;
0 g- s S8 W3 U' Q; N# q( [, F( ^ if(k==q)+ ^4 |/ m. n: }, b- _- g$ h/ e
{ *(p+i)=0;
% ]( h1 M& I7 V k=0;
/ P n- H; e+ F U' l- V. U m++;
' d- P8 w+ _- _; m& V }$ r# {* p% u' [ V
i++;
" M2 y5 `1 N' i( e. b" |0 s if(i==n)i=0;! C) o2 \2 R8 C/ S2 m
} R& C* k# K& }' \8 Q
while(*p==0)p++;
6 d( l) n5 W: L7 }2 L# A3 A printf("The last one is NO:%d\n",*p);* f I/ {7 O+ `* S, S5 i E
getch();% d0 Q: J# j2 c0 l
( H- h4 Z3 j6 ~2 Z" n7 |3 ~3 @} |
|