|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!# s* Y0 n6 s- y- f" ^" X+ d% {
这几天我在忙着编一个问题,我用了一种方法编出来!
4 g* q1 Q1 Q0 \) B/ E但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
9 P& s4 `& a+ @3 [/ Q9 M. s注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 6 Z2 C P% m+ ~2 Y% H: B+ P
% m4 W& U$ `0 b6 w, F
; v7 g: z, s5 t& j 题目( i9 |' e4 W [; U0 V. b8 u( |
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
; r7 H) k5 C3 R6 H1 L第一种方法:利用循环链表
; R( Z1 b4 T1 y" L#include<stdio.h>
2 {# F" h( w7 L. m, |) \ L#include<malloc.h>0 F3 C& |; H( g
#define M 8 //共有8只猴子
2 @- F l6 {" j& f* m3 G#define N 3 //数到3只时退出第三只/ `; N6 [ X, o5 d6 Q; U, u8 m
typedef struct monkey0 @. V: p* Z! W: @& Q, ^
{int number;
, r) e/ q% z% j7 B1 @5 X8 O0 qint flag;3 p; Z" K$ w+ g" ?, K2 z
struct monkey* next;. r6 h. n; N! k" A2 [% p, i5 g- D
}MONKEY;. a M; t) j- @! A9 C
main()
6 R7 Z& B0 X9 l! h- X{ MONKEY *head=NULL,*p,*s;
# `& g, w8 ]2 n5 g0 D: Z. _ int i,sum=0,count=0;- s! K' q4 w; S# m0 N9 R2 l" R
clrscr(); //清屏
7 o2 y: y) f0 o" u0 \+ N p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存7 g- u: A, V; e
p->number=1;p->flag=1;
, ^9 B6 `* z% J7 y p->next=head;6 J9 Y" j' b, j* S) E$ K, z
head=p;3 `, S/ c: I: Y
for(i=2;i<=M;i++)
0 y. u) y; s7 M) p# ~. u. @ { s=(MONKEY *)malloc(sizeof(MONKEY));
0 g. O$ {$ S1 R* M3 i s->number=i;s->flag=1;
5 B! V& u. q9 x! \9 h& ?7 Q s->next=head;
$ x8 I% a" ~ ^$ r, c( C+ w2 q2 O p->next=s;p=p->next;
. f" e; N6 [4 C" n# Q' U5 u }
. F; |, V! S r! U p=head; T/ g# t3 l# \" {* c9 i4 f4 v
for(;;)$ U2 ?: s& _- g. X- E
{if(p->flag==1)
+ C! v; N7 ~5 h; s" Y. n/ \ count++;/ `1 J0 R1 c8 G& J0 { M' B y' s
if(count==N)' n. W4 {) T. l e& }2 G
{p->flag=0;0 R! N0 u; S: R; K; D: N
count=0;
; Y/ X8 q7 ~+ [, d: u1 j sum++;}: Z1 Y- Z5 [) ^+ @7 H
if(sum==M-1)
! K# F+ ~6 `. ]5 i break;5 }( A2 ~* [& |" a) K: c
p=p->next;
4 G( F' [3 C, s7 Y. P4 O }
d$ b) p5 g0 [5 q. n/ ` p=: J: z% E$ r/ Z" L
head;
- F/ r, E4 d5 U0 \ for(i=1;i<=M;i++)
) u% e8 L% U) f$ ^! {: c1 E3 z2 X { if(p->flag==1)( m6 I6 e7 a3 m; G- A4 K! ]0 O
printf("\t%d",p->number);
" t* s( D/ u* ~: ` p=p->next;
6 E5 y6 W" g% P4 Y9 Z. P/ L }3 g3 A& L; U4 q8 y0 \4 F
- i9 t0 v; P+ v2 S [ y
6 p/ f1 J1 O6 R! p
3 Y( X3 S; M# H& i# v3 M1 I}
' c* Q1 w* X8 L1 K3 T) y第二种方法:数组# ^/ u9 s5 A" q! A7 a9 J
#include<stdio.h>
8 \6 i; x' v" w, J( z#define M 8
% L( C1 D$ `+ `, J/ a T1 Q7 fstruct monkey* q. Z7 V: P* _) W0 X
{int number;% B# S8 W+ P/ `- u4 p' [- M
int nextp;
e+ s% j" j4 l9 |* o1 r9 {/ u, R}link[M+1];
6 }- s* o( {, |) o' A
) z1 Z; u' { H7 V7 Svoid main()" O! z1 u) Y9 _+ \, H' e% h& I
{int i,count,h;: | V6 T& n1 p# z+ Z! i& E
for(i=1;i<=M;i++)6 h3 D- q e. |% j, m
{ if(i==M)
0 z, c1 }, g) D( f link[i].nextp=1;
# E4 r. B6 I+ i! [# D0 l else( {# i. V+ H+ I7 S( w# k
link[i].nextp=i+1;6 H+ U8 s4 {$ p2 W
link[i].number=i;
; s* B/ w3 v. p0 I, T) V# `# |}/ {3 T( u' i9 T# @* K i; F1 |
printf("\n");- Z( ~) _% U% |8 o: z( {
count=0;
- T! }+ Q$ b' ~) k; r) lh=M;$ c6 Z7 k# g- c" D3 o
printf("依次退出的猴子: \n");* Z. a/ \, k8 ~( u
while(count<M-1)) S. L# ?! s( N+ B; N0 M& v2 R
{i=0;+ m$ U/ R2 R* ~; n+ P4 c# A
while(i!=3)+ |7 N8 z2 E9 f- @0 `# C
{ h=link[h].nextp;
" X# m4 X& _* k9 d5 k if(link[h].number)6 t2 v2 [ E B
i++;}: s N0 \2 ~6 Q
1 r9 _- q1 a& B) q+ r! ~% Oprintf("%4d",link[h].number);
( w7 @4 |" R( W# slink[h].number=0;. Y( q* d# P; s* V3 V( x
count++;
+ P* _5 w/ c6 v. H+ w) s}
! e. I7 K" N1 Z z! Q! e7 u$ c# y- `5 B% W
printf("\n大王是:");' @* d' L0 Y% p, p5 t
for(i=1;i<=M;i++)
, q$ I/ l: d/ j1 C if(link[i].number)
" u6 |9 B1 U/ B% d$ F printf("%3d\n",link[i].number);1 c5 p. Q; k0 K- ]7 s" C
: z7 O- K$ `; I7 H0 J' X. [) d
$ ] L7 }! D, B, O; i( v$ \% R}
& F8 F: L5 v# B% K- H第三种是普通方法for循环7 I, R$ e; N. r0 c& H6 ^6 c `/ a
#include<stdio.h>
) e" i3 L1 x& vvoid main()
- Y3 T/ C- _# q' i{ int i,k,m,n,num[50],q,*p;* ^* j# v, u B/ m2 u% k8 Y8 J0 {
clrscr();
4 [; |8 d( A O" q0 y' ^; l printf("input number of person: n=");0 V9 r0 i7 K5 B% Q
scanf("%d",&n);! { a8 I; O6 b
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只. F$ j" O7 J* B% K0 W+ S0 J
scanf("%d",&q);
3 y- m! [2 D5 M# I p=num;2 \8 m- g" E6 G% I; B# U: z
for(i=0;i<n;i++)
/ V4 q; J! D x- Y$ M( e" W5 d *(p+i)=i+1;
- B! m9 e' b% D: n, J1 Q9 Y( H i=0;
% r" }1 W' u9 p+ y9 A! F; j9 j k=0;6 b7 q4 }2 [4 d' `7 p' ^! i/ N, z
m=0;' D) u' k. s2 ]. `
while(m<n-1)1 q: o" E& c' R0 }" P: i; Z
{if(*(p+i)!=0) k++;) K: P$ x v6 M& y7 @) @
if(k==q)
x1 H! U: k- U# P/ N t { *(p+i)=0;
( l4 v0 ]8 |% ` {9 w k=0;
: p& O$ U7 q' R) Q/ t7 T+ G, R) j) m m++;
; J/ f$ _9 |7 j+ _* D) n/ R }& @+ F. ^! x. h! u
i++;- g `( k- D u+ m( ?% g
if(i==n)i=0;2 L6 U3 k4 y8 }$ K1 |
}
/ D: }2 W" i: {3 j0 _9 U9 V6 o( h while(*p==0)p++;$ Z! r& O6 c8 P$ X
printf("The last one is NO:%d\n",*p);: J# h3 f( _8 b% f E0 Y6 Q
getch();
m, u1 j* i4 ?# o9 s) S
$ U% x. d+ w& t6 S" i( p2 W} |
|