|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
0 {4 q+ A4 w% o1 h这几天我在忙着编一个问题,我用了一种方法编出来!
- q. |; `5 v0 y' ?2 q6 r但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
: R2 x: n) k) `# A注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 * z) ^( A' u) h1 L- ~& g5 z' a
4 M# f; L Y- }. s- i- L2 x& c
4 \1 g, k" t1 V: p; B& y 题目+ S B* g7 g# d$ ^- z
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
/ y6 `: k( [, d. ^第一种方法:利用循环链表5 @2 J8 G% `+ Z5 W
#include<stdio.h>
/ @: O; S/ K2 b#include<malloc.h>0 A; l+ q8 Q, o6 a
#define M 8 //共有8只猴子
2 G9 V" J3 V5 w0 C. G9 U#define N 3 //数到3只时退出第三只
0 g/ E7 T7 B; ltypedef struct monkey
; a' G8 c5 d) b5 q2 g{int number;
; D% C' z' _7 \9 n" Aint flag;
% W( ` x, K: W8 gstruct monkey* next;
1 T, |- t9 v. b3 D$ z}MONKEY;
8 v1 l) N( A+ _3 Xmain()
3 P) U$ x m' k! Q; z: Q: z3 s2 p{ MONKEY *head=NULL,*p,*s;5 S F' s+ M7 {/ R( K
int i,sum=0,count=0;+ c! P& r5 f2 V0 S! K
clrscr(); //清屏) x f( }2 j+ g
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存, T9 ~' ~! T* d; B
p->number=1;p->flag=1;5 @/ d* s9 z; J' e9 O9 W Y
p->next=head;0 L6 S( W0 J* ^2 q
head=p;% s; L8 C( \1 Y4 O
for(i=2;i<=M;i++)+ ? F4 j, v4 Y% q! x
{ s=(MONKEY *)malloc(sizeof(MONKEY));
) G, B! `* i6 A9 _ s->number=i;s->flag=1;
f* [& `" Z- S% Y, _; V s->next=head;
; l0 L! v6 w1 E5 q p->next=s;p=p->next;
7 O; l6 B$ L3 K' e" z }, c4 o y9 t) I3 n, m" r
p=head;1 I A& |) U8 c+ @5 T, f' m: X
for(;;)
Q# r# R R8 n) l) i; V: B {if(p->flag==1)4 F) Z; t% g% Q
count++;
8 _5 a! w% K/ X" V a0 Y4 O- X if(count==N)
, \$ I- b; K. U4 i {p->flag=0;! ^+ \3 C p) o3 D
count=0;
- m C# r0 J# N sum++;}
9 ~" `! b: a' S" s3 m' k if(sum==M-1)
: [+ a8 X# ] D3 {; p$ \" d# z* u! ^ break;% a7 R- i# ^% p( j4 }5 v3 }( g2 k
p=p->next;( W& r' W7 D1 o* j) y" j
}8 n! L2 c4 q. V7 g4 }7 B
p=
! H2 N6 d$ x/ J6 i/ [ head;
* p( |/ R% N' B% L4 ] for(i=1;i<=M;i++)
, `/ X$ i H4 g `5 e" A p1 d { if(p->flag==1)
9 [0 W$ Q& C/ s1 W$ ? printf("\t%d",p->number);
7 i" C$ h7 {; G1 g4 }2 ~0 Q p=p->next;
: h& V4 C8 ]7 C e W1 \ }
4 t* P8 c e0 P) _' j" N# Y* [. j9 b1 Q8 {% y4 W
6 o+ U) w% h- c, u0 ?& ~, s; q/ C8 ]4 z
0 |1 t1 `/ }. @
} . g& o, H1 @- q5 w0 ?9 ?' x
第二种方法:数组& o) `& C) o0 G9 G( \
#include<stdio.h>0 W. K' @ c8 D
#define M 8
1 p+ F) c4 u" a9 B |3 rstruct monkey
, G2 P; q8 S5 |" K, x0 T{int number;8 q! |" K; U( y) S
int nextp;6 k6 \5 |5 l' _' n0 P
}link[M+1];% x3 Z) r/ L. `) ^
2 u7 y6 `( N$ p. mvoid main()
4 H' e! ^) @- c5 B& c, |) t# B7 j- r* D{int i,count,h;* k+ n L* T6 V( w# p! H% y
for(i=1;i<=M;i++)8 M0 m. i C! Z- k
{ if(i==M)0 Y, f, {8 i4 q! b6 Q. d0 u% |
link[i].nextp=1;! I, M1 q: H# b: U* R* v
else
1 a& ?5 m& T3 b g' ]" r link[i].nextp=i+1;
( G! m' z. M& u" ^. U+ }; y. k) A link[i].number=i;+ y6 T6 b8 _ I* i
}1 { @% I5 v+ m1 y8 C
printf("\n");
" F3 i6 C( R& k9 }4 Hcount=0;2 `* m& l2 U: Y/ Y- D+ _4 u
h=M;3 F* s% P* k3 R0 O" ?
printf("依次退出的猴子: \n");
b% L% [9 B7 @! n1 ~. gwhile(count<M-1)
0 b) G2 U& [0 u, A# i4 S9 o4 T{i=0;5 d2 | @) z! `1 o8 r
while(i!=3)
% K1 b& w3 V: ^: G, |$ D{ h=link[h].nextp;
3 c7 m7 o3 g# |% f! O& z5 K, g: G0 X if(link[h].number). S5 k2 s! c( k; s/ a7 t- i
i++;} F7 G* @ _0 V
" \" b9 p/ f D3 A5 W, D
printf("%4d",link[h].number);; f3 p0 E8 E4 i, Q) s
link[h].number=0;
2 _, Z4 y9 |2 ^3 e$ g2 Icount++;
( f2 S+ h* ~ x3 {. c}3 S6 H3 B( m5 Z* p! [- D7 T
+ y) B0 H' w2 N' X: R8 s% [
printf("\n大王是:");
. f% D5 E* Y" m/ M for(i=1;i<=M;i++)$ w8 |0 M( `2 W: ~+ z H* j
if(link[i].number)& H% x1 \- o5 X! N- [( Z K0 X
printf("%3d\n",link[i].number);3 y- p0 F2 o! X5 J8 H
, u! O# y( l- F0 l) A( `' @1 O1 D# _. V. R Q( O
} 9 ]9 Y; S9 {' Y8 H
第三种是普通方法for循环" ^' m1 T6 R; z) h$ O+ v
#include<stdio.h>
; g5 l" a5 w0 x) Evoid main()
6 \$ Q; |/ Q' K{ int i,k,m,n,num[50],q,*p;9 y0 }) b! {; C( h! G9 }7 V
clrscr();9 l! q0 K" d' c: ~. y; D! z; W2 E
printf("input number of person: n=");
; _" U% ?( b8 D3 K scanf("%d",&n);6 Y" u& c# l8 o, A2 U3 }
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
7 M4 Z- g, N( t# P$ R7 K scanf("%d",&q);
* d# ?- `( k, {$ ` e8 ?2 ~# O p=num;" ?$ N) E9 m m, K6 w9 Y
for(i=0;i<n;i++)
; M+ O- m% b; z0 s$ x& A *(p+i)=i+1; C! L" T' l0 a) u) I- o+ }
i=0;: U! s) {% R% d" p2 L5 c2 b$ _" {
k=0;2 w: t6 d* O. i
m=0;
7 @+ O- j7 T0 l* c# [ while(m<n-1): T1 l/ S1 C% R- H
{if(*(p+i)!=0) k++;- w9 \& f- O6 w1 m6 \3 K* x
if(k==q)
# |# V+ O% O$ z7 ] { *(p+i)=0;6 v1 S1 |' b' n. n- u1 d9 k
k=0;
8 s T8 b/ [( B0 @ m++;
) _- u8 N! Y8 D; H }
7 f1 k# j, M+ K1 v5 E4 ? i++;
; L5 f1 d! l, L# L if(i==n)i=0;1 z) D8 i& Q% a: M: Q
}
7 W F( l% A! o9 [/ | while(*p==0)p++;
& l( v+ _, D, z' G printf("The last one is NO:%d\n",*p);
# h6 t' Y: G: r9 h) ] getch();
: m/ g9 {" D" u
/ t! l T1 @6 d' f} |
|