|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
5 i$ s/ y: r! K( S: Z, A" T& @这几天我在忙着编一个问题,我用了一种方法编出来!/ F# l+ Z) P% j) h. d5 Q4 R
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!9 M% R" E) ^) H
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
5 O( _# l# L7 o. H" Z7 J0 w: j$ v2 V2 L/ }8 j Z
$ D, _7 K* N; E; g2 ]0 R# c3 b: g
题目; x$ B" }3 }2 p7 w
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
/ w1 F5 B& {. s2 P' O Z第一种方法:利用循环链表
# w# `( p* I2 W& ~9 U#include<stdio.h>" r4 u/ U* k/ }# G
#include<malloc.h>
3 v3 n9 ]! h0 d; U* X#define M 8 //共有8只猴子3 `. I6 H2 X/ \: E6 I; E
#define N 3 //数到3只时退出第三只1 S# s; ~) I3 I- I3 B$ _; t- Y
typedef struct monkey
& [( I2 X4 @ ?/ j% |4 S4 M0 o{int number;! J# |6 T. \% P. A+ `/ U
int flag;
0 o& X" r8 L# D/ Q, Z1 pstruct monkey* next;
( g+ C! E" ]' |+ \" E( B5 V; V% C}MONKEY;
0 p! e( f/ R+ i/ D# X! Jmain()
# T; Z; }: H, _{ MONKEY *head=NULL,*p,*s;2 d+ r9 b& U% p7 K* j
int i,sum=0,count=0;
% A/ \) g u/ h" J& {6 Q clrscr(); //清屏 i/ s% e! u+ v3 J. ~
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
8 w6 [) [* s( q9 F9 C: i p->number=1;p->flag=1;7 |/ |0 v! Z0 z( S2 x9 K' d6 q
p->next=head;
4 p! n# }) H5 W head=p;: h5 w: I5 S! J
for(i=2;i<=M;i++)# X' N6 h1 _- r- Z
{ s=(MONKEY *)malloc(sizeof(MONKEY));6 W+ s& T1 x% }+ _
s->number=i;s->flag=1;/ @1 w5 [9 R: e/ |2 }4 S
s->next=head;
6 Y. L: J5 j, S+ r' s9 q' R p->next=s;p=p->next;
% [. K L& t. Q }# h/ ^( u" t v
p=head; a9 ~/ E. K5 a! B# \/ H
for(;;)
; D2 e) |( H) \ T/ W {if(p->flag==1)
* O1 r- S" ^" O" j' U count++;
4 L9 V) E! G6 `/ D- v if(count==N)8 K2 h' L! ~% @# u* r
{p->flag=0;
. L2 b# b: a( o U) C: h& W- R3 @ count=0;
4 c& A+ ^( T4 Y9 B4 @0 s sum++;}
3 }1 f$ \7 f) J2 g3 q if(sum==M-1)
' O# J. m6 V$ @ break;
! A" z1 T2 W$ I" r p=p->next;
$ f! `# y7 G& p' G! K. V- z }! y' _4 F; @# d2 A& x
p=% v4 g' ^. R. r
head;
/ _* C3 m; o. h. @/ O for(i=1;i<=M;i++)
+ a7 w9 m! {/ k; i5 W8 m d { if(p->flag==1)
7 r7 c$ Z" Q6 o1 f) a printf("\t%d",p->number);
! D! x5 g# J( l+ o5 Y. k9 ] p=p->next;
- O! z8 F2 R1 J* y9 K# I }% g/ I. d% o! p# e6 c, q( t
+ u- n* I) t7 Y/ w- X( [
1 \! G1 k5 r8 S* i
- }) X1 ~4 n; m( u}
' Z5 y1 c; E) U第二种方法:数组
6 P7 d" v3 b! x" R#include<stdio.h>* {* D+ Q q! {$ n" J/ p
#define M 8" @) }6 U3 Q3 Y( w6 W V+ s7 q
struct monkey1 F6 J+ l' B' J
{int number;
2 J0 w3 U* l. }' U& C' sint nextp;
; i1 I- j6 J% K. x, a) r+ O2 s}link[M+1];
9 N6 ?5 B( @. H* a
* \: k F0 b( j* Xvoid main()
- g" b4 y+ p$ B9 |7 y7 s1 T{int i,count,h;
# M$ d0 o: L: j1 c0 T: c: n9 _* hfor(i=1;i<=M;i++)
3 u" V" j8 o9 g! L8 a1 g2 Z{ if(i==M)* _3 E2 F, v" D1 U6 R$ M
link[i].nextp=1;
( w( @ b& Y, d# y% M8 ~ { else' s5 c& [7 p+ o6 X* E: M
link[i].nextp=i+1;
, m8 o( y- W. b" p0 a+ c! P6 t link[i].number=i;
! U f5 p/ }7 E0 E% }! y}$ [8 h' N1 Y- w+ s7 Z0 Q
printf("\n");, I* m- ^' U9 q0 h% U' l/ C2 c# i
count=0;0 c* T0 i6 g# r' U9 j* [6 ^
h=M;; N7 U$ I2 [# f* _
printf("依次退出的猴子: \n");
- |( l! g; C) Q+ K/ l6 X' Gwhile(count<M-1)5 v ?! D3 h( Q; p. O
{i=0; H+ m3 L1 V2 v/ h$ z7 [
while(i!=3)
$ h. }% Y9 w+ L, T* u{ h=link[h].nextp;
5 q2 n( y/ N! L' Q9 Q& b if(link[h].number)
/ P7 }3 Z! K- _. W$ _4 e6 T9 b X i++;}
- S9 P6 O+ l1 M2 ^, P) V
1 _9 r& d3 ^: j/ _6 ~' Uprintf("%4d",link[h].number);
+ a, `/ z6 V$ @( Blink[h].number=0;
0 u; ?1 B( {9 A) C+ Z `count++;
) Y( p d' l8 Y* Z r/ X! p}
$ T, Z0 ~# T7 Y% K& t9 H
- r- `% D9 q4 O% V. ]printf("\n大王是:");( c$ I Z4 m# K, ]2 r. P9 ^* a7 p
for(i=1;i<=M;i++)
7 x% S) ^5 s. _) k* {- `+ j if(link[i].number)! v8 ^+ P7 h4 S W% `
printf("%3d\n",link[i].number);
* C2 O3 F( K: A4 X- [8 O0 d" y. o) [1 D4 o! a+ g6 e7 V* z1 K
5 V* f; B0 z6 K9 L% q% e& v
} 3 Z! L+ r2 W; A3 N" W
第三种是普通方法for循环' W0 J2 ]# L6 S1 q
#include<stdio.h>
' I3 M6 k3 ?( w5 T! |1 k, S" |% k& ovoid main() I/ p$ E3 \8 S& x, X9 Y
{ int i,k,m,n,num[50],q,*p;5 e5 f* {* j; F5 f; v
clrscr();% T, J# K" n( r* V1 B Q
printf("input number of person: n=");- F1 X* G5 T B3 G
scanf("%d",&n);1 I1 I. I2 g! k! n+ o6 d
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
1 t4 y* m7 w3 ~6 h scanf("%d",&q);
6 f5 v3 k- g; V$ N* @- t p=num;
6 b; e8 u; _, h; |7 ?* o for(i=0;i<n;i++)) N) O+ n+ i5 t7 x% G# p; D2 T
*(p+i)=i+1;
7 n9 X: O# A0 F. ~ i=0;) s* y3 z u9 c5 M, L, f* v
k=0;+ r4 ?, b- w! W5 h
m=0;; X% v4 @' {2 S4 Y' }0 h
while(m<n-1)
1 O) k0 ` g8 f* m' X {if(*(p+i)!=0) k++;
) ]2 }5 u) q3 F1 F if(k==q)
, F8 j; X5 v j2 [6 V8 l6 `( m { *(p+i)=0;
- Z; J" j3 e/ g' T k=0;$ K; k; H0 u5 j( S0 o
m++;
$ f3 T' l h7 K; \ }9 J2 o2 a% x8 g8 }9 s0 N0 o
i++;
; T$ P$ Z% Q1 g( L3 k# P# v7 f* C7 ] if(i==n)i=0;
! k. d" Y! G0 E# L/ a }( i, G. R" Y: [9 p! S4 V4 j
while(*p==0)p++;
" y# m* d$ R) H& }. _9 ~ printf("The last one is NO:%d\n",*p);
8 B4 O$ \( X: X; d getch();3 D _( j4 n! H/ c" O
7 B5 Z; I$ O; y} |
|