|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
$ r3 ^" |( {" Y9 _# i L这几天我在忙着编一个问题,我用了一种方法编出来!9 L& j" w0 J7 \5 P. }3 I" o0 z. N& |& f( A4 s
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!/ H) B6 r5 H* L$ f* T! g2 U; _* E
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
6 ]8 P _. V" U0 M4 z' b* F, b
, F6 K" [# r4 E; | q2 J3 B4 n. e; w0 v& p( x
题目+ z& {- l! p) ?
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。$ r. D) z( K/ W4 t/ F
第一种方法:利用循环链表3 k" V+ o+ v! o1 k T3 M
#include<stdio.h>
& K" r6 A. E% E' y! J& @#include<malloc.h>9 [1 j: K, U+ Q8 D0 Z
#define M 8 //共有8只猴子
- W5 c, ], ~! \9 Q9 b! C#define N 3 //数到3只时退出第三只* d: ^, K/ |4 l: Z
typedef struct monkey0 P' p) t# h+ M' f/ {$ ?: b; V
{int number;2 W) m( A0 z# o( C9 |9 o
int flag;
3 E) P" _: I! g1 f" X) Dstruct monkey* next;
: R- u3 @# ]1 _" I4 t u}MONKEY;5 M/ g9 W3 `1 j) b! [2 b2 H, o/ f$ o# z' R
main()
8 V& o! X& n9 L' G. y1 J% z{ MONKEY *head=NULL,*p,*s;
^! M' I% `( d" i int i,sum=0,count=0;
' C6 ^( F. y# @3 b1 ]: A clrscr(); //清屏
$ |' n4 I7 a5 o( }5 K7 l p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
/ p @. @9 T+ Y* q p->number=1;p->flag=1;
. A8 `$ f, ]& k& t! Z w; f. s p->next=head;
9 V/ B8 R& |6 S a1 d head=p;
8 n/ ^$ C1 r1 N4 ], O( i- q( ^5 B4 @ for(i=2;i<=M;i++) j) Y) `8 e, n8 c, W9 [
{ s=(MONKEY *)malloc(sizeof(MONKEY));% H! X% D: z2 t g
s->number=i;s->flag=1;
/ z' l: k0 a* a$ ^1 m- u s->next=head;) r3 h' l/ Y1 J
p->next=s;p=p->next;* y: t- z2 X1 V# L
}
3 U1 j, I9 R3 {2 O7 m8 { p=head;# t9 H4 c z J' ~
for(;;)8 D$ p4 l+ _) t2 a( R
{if(p->flag==1)( C2 \& M, }+ Y; T% L
count++;7 D$ m* R5 M3 @1 g8 e
if(count==N)8 G* z7 p8 _6 K" s" K4 H
{p->flag=0;
) T# f% w( Y, }" n% A! p: F count=0;/ v" a; u: F/ j7 B- q
sum++;}5 G! v% ]7 f+ z% [0 [ I4 s
if(sum==M-1)* u/ b+ H* t$ a& b! R |
break;5 S4 b0 B. _( k2 d$ r
p=p->next;, v9 ^+ ]6 _) J
}
7 @- t6 B/ \7 A2 N0 S p=& O$ @6 f5 S8 T8 c
head;& W* ?1 e) I- G; A* K0 Z8 o1 F
for(i=1;i<=M;i++)' B2 G2 U; {2 Z! X$ M; x5 O
{ if(p->flag==1)
5 C* `2 S6 X$ a4 u" H( h printf("\t%d",p->number);
) ~' S2 C8 M. x( M p=p->next;) j, x5 U' B3 j, k& g& Z1 p8 R5 ?* a
}5 E& b' z* W* ~: Z
" I' O2 p. I; R4 @+ b4 @& [" M) X9 y
) n; [$ N% C4 _3 m. V, ]
}
( J. N4 f- _/ ?第二种方法:数组
: S: v& Z$ q' [5 v! ]! d' c0 m3 w6 R9 y#include<stdio.h>
8 V) @9 M, M. [4 q#define M 88 z0 N) e! s, ^0 @+ V4 ~) r
struct monkey/ Q% {& o1 e" X) W7 E9 g3 z# X
{int number;: v9 r8 w+ r2 }) c. R; V
int nextp;* Z( ?1 e7 f) d; L
}link[M+1];
, Q- V( \ O: {( F1 _" v a2 p
+ {# D: e& H7 [. \void main()3 ^( h# z8 h$ V, G* G5 X, G
{int i,count,h;
0 k, k, g! C! N4 u- _! w' gfor(i=1;i<=M;i++)
0 V) O, r2 r3 C{ if(i==M)
( o2 Z2 @- D0 c link[i].nextp=1;1 `0 |. H% [0 H5 M
else
{% r& Z$ ^3 | link[i].nextp=i+1;! N+ Y0 ]8 W$ i1 U
link[i].number=i;
3 D$ d- O* _. J, p. ~2 J}' C, P8 E0 d. O4 C
printf("\n");; M& T, V, F( X3 |
count=0;
; @3 Z# G' V8 F& g" O3 Oh=M;' @* [0 s V$ P/ y" O7 }
printf("依次退出的猴子: \n");. ]5 b6 u. T7 T3 E$ I c4 c! F
while(count<M-1)& I. O& q- w) C: |% L
{i=0;3 E7 C; Z( ~% z- X: s7 e/ p5 W
while(i!=3) R8 h# T% ?1 o. X- f1 B
{ h=link[h].nextp;
' u, B) h0 a! ]7 r2 U8 L& R if(link[h].number)
: ^$ {/ [; b4 x) S2 Y i++;}
6 Y8 c1 O, ~+ @3 ~4 c0 q3 o7 c1 p3 I4 g7 `3 \, E" E1 |
printf("%4d",link[h].number);' H, S$ s- |; b- W7 [1 p
link[h].number=0;+ b9 m7 ?& y8 p( _: z. M
count++;
\; K+ V9 o$ c" o9 p+ X1 K. o}
/ U7 c' o6 ]' [) Y( V! M8 A" w/ \2 i3 ?: r) H( N0 A9 V. M
printf("\n大王是:");
6 y% D( V$ u8 W; }) K& K for(i=1;i<=M;i++)
4 E6 g# I- @ e0 ^7 ^1 s2 ?3 ] if(link[i].number) z' `7 s2 x* |2 w9 E" Z* M
printf("%3d\n",link[i].number);
7 _- Y) l( Z/ A8 V! r$ i
5 ^1 [+ M7 S2 A2 m7 P4 Q+ i E# H0 L0 w
} * y5 \6 n P& t" K6 s0 A% P" E8 L
第三种是普通方法for循环
, c! ?1 {; x) v/ {3 K#include<stdio.h>5 L& e" w+ T0 L( ~3 l
void main()
' i* q7 |4 R3 t) X6 M7 r{ int i,k,m,n,num[50],q,*p;& _8 V( s# h' ?* ^: f5 U
clrscr();8 X, F* Y: u" m( |
printf("input number of person: n=");. Y Q4 s( j+ v( q5 R5 o- m
scanf("%d",&n); b, h; ^: z9 C8 e0 [' e4 A4 s# a6 Q
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
; f$ \) n' k# [$ n( Y7 [ scanf("%d",&q);
$ C3 B0 ?7 p# N$ J* ] p=num;
, h2 r( S2 M- T, B# u1 J; n0 T6 ]+ I for(i=0;i<n;i++)) H3 U* E6 J- k0 X# @7 Z. ^
*(p+i)=i+1;. D. p/ ^4 F/ b6 N( T
i=0;
# }/ |5 ~! s$ f( c' D8 ^1 D, q7 g, H k=0;
1 P* K+ |0 d0 B: K$ ~ m=0;" ^, O$ \# i8 a6 G) Z
while(m<n-1)( B9 B/ w" b# d- Y. E4 k
{if(*(p+i)!=0) k++;
! n* p0 |5 P/ Q if(k==q)9 \0 K4 {! d3 \: r+ u3 I& ?( }
{ *(p+i)=0;9 x0 O- e. P/ Q& H; `. z0 u
k=0;
, ]* N X- S y: _% G& g$ t m++;1 Y: c! p# r7 K, W' Y
}
' N. }# B! G v( v i++;+ Q( P2 Q3 O+ T7 I; b j# T- A3 R
if(i==n)i=0;
b+ c5 I+ ?( i4 J. J/ w }
( c& ] t) F( `' m) ~ while(*p==0)p++;
4 Y8 Q- z" O. O% q4 i printf("The last one is NO:%d\n",*p);0 F& |9 m! O4 A6 N
getch();, M, ^$ T9 N) H) t$ v* N
7 ?9 X9 \5 z& c+ v1 B+ n
} |
|