|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!, ^/ w& i: L' w3 j! y
这几天我在忙着编一个问题,我用了一种方法编出来!
2 Q/ P0 W% Q. l4 z. ~7 L但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!- G0 }/ m0 @/ |- T4 k; d. Q* v
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
8 s. C1 N9 g& E! J4 g0 e! _6 h1 R7 }9 c9 T8 C0 ^8 Y
+ l6 {" u1 }4 \7 I3 D4 _ 题目
7 @7 [- o! S" }8 \/ \$ {2 y4 w山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
2 C; B) U% j9 k* q7 j: i第一种方法:利用循环链表
1 K' ?8 c' `6 \' ]#include<stdio.h>$ ^- `7 }8 p9 ?8 g3 _2 b' i
#include<malloc.h>6 L$ E4 C& N( E: Y; R1 B
#define M 8 //共有8只猴子
1 Q( @8 N9 n/ b. M6 h3 O! R#define N 3 //数到3只时退出第三只
0 Q g4 e+ G) d) ]) l* vtypedef struct monkey% j! O- T: X. K+ X" o+ z! u/ u
{int number;
/ I, r# G% n; p3 n0 a- Kint flag;" b, C' @6 `1 Q9 K. x6 T8 q3 X- X
struct monkey* next;
% L' F: p8 z: Y, d0 V}MONKEY;; `" Z$ J4 ^' q, F) B, l
main(), {$ Y; r! |! i3 G! T" O. ?
{ MONKEY *head=NULL,*p,*s;% ?5 J3 Z& f" _# o: b, a: K
int i,sum=0,count=0;
" @$ P$ r% r. U, r8 w5 |# R7 J$ t, O8 B clrscr(); //清屏- ]. J+ J" X# C5 `( `
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存+ ~+ M. E. I8 i% I- T3 F
p->number=1;p->flag=1;
$ @* S" J, {, L9 P5 } p->next=head;
/ l" F4 K8 K5 P/ ]0 `8 \' F head=p;0 |; }. n: W, X: p+ W6 L$ m
for(i=2;i<=M;i++)
3 |& V0 b$ s) e/ e" t, L { s=(MONKEY *)malloc(sizeof(MONKEY));
- d( n7 L9 }; A2 C! h) y! L9 p* } V s->number=i;s->flag=1;% P2 \0 \' e; Q& o* ~& O7 w9 z& c
s->next=head;
6 }2 _8 L6 |& s3 n! n( D P p->next=s;p=p->next;
0 `9 y' E X- n; ?! H }7 H I* T3 q7 A1 h' x9 L
p=head;- q0 M# {# z2 H2 o+ R1 r f3 ]; n9 l
for(;;)
7 C. |0 Q) g" s/ Q {if(p->flag==1)8 p; K5 m" b+ u. [
count++;# _% ^7 R$ k2 g- z6 j0 T
if(count==N)
6 f. Q0 G, B5 P9 \ {p->flag=0;
/ |! w6 \1 r! U5 S3 R count=0;6 B# T0 Q0 l! e" w
sum++;}
" `3 F2 l* m9 c6 k if(sum==M-1)# |( A% H0 ?9 F6 ~( \" D1 O
break;
. ?2 ]1 j7 O1 N$ s' K p=p->next;/ ?: ?4 c' D$ @% W2 U
}
0 c9 l9 P0 o# U p=
3 j5 v. ?9 c" y0 P head;
. W( s; Z' m8 A M- h for(i=1;i<=M;i++)7 R' v# l0 H# I. @$ V
{ if(p->flag==1)
' {4 ~6 v6 r3 m% \& c printf("\t%d",p->number);
4 b" `. t7 x- t5 U4 t! g- d p=p->next;! B2 `* c4 l/ J" j# D0 K, s/ W8 J
}, I; T" F& i, E( X4 U' F$ ?2 s& J
3 Y# _% o9 {( _+ E0 c, n( _0 H, a
5 }& g6 ?, p* `$ h! @/ C9 w
6 n0 G! q& N; z5 {% F0 w
} 1 v! l- c6 I1 v+ p4 u( E& |9 i( E- k
第二种方法:数组$ }( }6 H6 s d9 V
#include<stdio.h>7 F2 P2 E3 n( l' d3 t6 J
#define M 87 K3 n" e2 n2 Y- f* N: j
struct monkey
8 W0 K8 u& }- t: Q" O( G7 @# ?0 {{int number;
, |7 U, S( y" R! {9 i5 g- k) |# {int nextp;
; {! Y r) F0 ^; B}link[M+1];4 J8 E3 ? c# D! |: s
% g. s6 Q |' U6 Bvoid main()
* T# }, H/ }' L8 S6 v, Y4 B{int i,count,h;
- y# `7 q L {0 }, E: ofor(i=1;i<=M;i++)2 ^5 M8 e2 a* f' g
{ if(i==M)+ b8 ~! i: [4 \5 `# X. v2 v; f
link[i].nextp=1;
J0 w/ |4 _" s y* G- h else
/ V9 {: E) L! l5 _ e- @ link[i].nextp=i+1;- R2 u, w8 E4 s+ K
link[i].number=i;
+ R( p( \: f T- V c}4 O, R+ q% T$ I1 Z) j4 ~+ d: c
printf("\n");. [) B6 a: t* C
count=0;3 }3 ^$ A2 c* i, g i# x* c1 h( P
h=M;
& m2 d7 _9 @" p. K4 ]- m& Cprintf("依次退出的猴子: \n");, }6 B% T+ }4 o1 s( _, A/ k. r9 i
while(count<M-1)
) `9 w5 a$ }# n) T' w" r' a: x{i=0;" z, \0 O4 A/ n' c% n. w4 l' u
while(i!=3)7 M, ?% Q5 q/ C+ S0 n' ?0 {$ `8 |
{ h=link[h].nextp;% Q$ V) |! n: E! f8 X3 N/ o, {. e2 q
if(link[h].number)
) f* c- R" E* P i++;}4 m2 |6 m+ ~; `# p
1 ~; `* m: T7 y) B% n% ?printf("%4d",link[h].number);. G6 J) @8 R3 ?6 r# b8 a# u
link[h].number=0;
2 \3 n% X" p/ l6 gcount++;) H+ L% l8 K) e5 H" F4 |
}% i! L) a9 B* P" h8 [" S' c( T
: h# F4 {) ]1 I- T- l* }printf("\n大王是:");
( D$ `: n) o7 p2 [6 ]. u for(i=1;i<=M;i++)+ O- w; I ~& a
if(link[i].number)5 b d8 d$ b1 `/ t
printf("%3d\n",link[i].number);
( u a+ j1 B8 } e& J$ N( `
) W& R1 ^) q" L! ?: n, q5 V# Q+ \2 o$ w( C, T/ G
}
& _0 l! s" [ @+ N( a第三种是普通方法for循环
! W, O( n5 j' _9 J+ G#include<stdio.h>) [2 E7 a7 q6 j3 H' D' t$ k
void main()
2 U0 g# ?8 `8 Z; Z; K* ~2 P{ int i,k,m,n,num[50],q,*p;# W7 `% I" z# k
clrscr();
2 H. B4 t; T* `- v3 J printf("input number of person: n=");
/ ?1 D" t' t/ y7 p ] scanf("%d",&n);0 r& q+ i' ]% p6 S8 B
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只* p: E& F+ i. y
scanf("%d",&q);* T: j6 l$ i6 B1 n: P) m" B4 {
p=num;
& b. q6 ?% A5 w* x7 q for(i=0;i<n;i++)
9 S, J3 P: j& R) ?) X4 Y *(p+i)=i+1;
) @0 z$ r) j7 N& ~8 _9 J- } i=0;" L4 |8 M1 K4 t; `. e/ i6 R
k=0; C3 o9 @0 h, G7 `( P7 m
m=0; ^4 b* K/ `2 R3 G
while(m<n-1)
; U# i4 i4 |5 d! R: ^5 E {if(*(p+i)!=0) k++;
* S. w/ n6 b) Z/ U, z if(k==q)
* @' c6 r3 W, g1 ? { *(p+i)=0;
( H2 Y# x) `# |' U k=0;
' E* m( P, B) ?5 A' q m++;
. S9 F/ J0 L7 e8 A5 D9 C }
6 W- P, S) z3 f8 u# V, u8 B: V; R1 v$ G i++;* V/ n* a# _7 U; j
if(i==n)i=0;
) r J3 ^9 Y1 ~: `: B9 O0 v2 ]- T }
5 d: t' R. u! ~' d# }7 j6 p. F L1 i while(*p==0)p++;
; B: |- w2 J% {8 Z0 R- h printf("The last one is NO:%d\n",*p);& u6 ]% G) I% J) N
getch();
$ D" T4 v9 u) A, a9 |0 ]1 Q6 Y2 K& R( p
} |
|