|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!" j# f0 f& Y' h# V) ^/ P( A) h
这几天我在忙着编一个问题,我用了一种方法编出来!
9 s7 D4 H6 S, f. V但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!. a/ h& w: B- Q7 p2 T, h5 ^9 c }
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 ( T3 v) K$ ?" T+ Z' w. z! w
( e; R' b4 n( z7 v M* |1 r: b
+ e0 G" h. w7 s$ k& X* B0 j/ { ^ 题目
N7 _) r. K7 C' g% s山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。 ]- y- H7 d5 w7 f5 ?% t
第一种方法:利用循环链表' i) B* ^& c; Y
#include<stdio.h>0 r; m1 G f% ~9 @+ i
#include<malloc.h>. S- M0 s T# m( O$ u+ l: f
#define M 8 //共有8只猴子5 m* s2 t/ P% n# t. {
#define N 3 //数到3只时退出第三只
$ y: ?4 N% H( X6 t. j7 Dtypedef struct monkey
: r. i: G1 I0 ?7 q{int number;
' O& n2 p2 _# i/ N6 N Q* O: P! rint flag;
2 X4 b+ ?% w* p( F6 Jstruct monkey* next;
* v0 I$ }7 F) Y- @- a}MONKEY;. ` D9 p O* _! o3 L- E, N3 ~
main()
! ?' Q$ L9 o j, Y2 G{ MONKEY *head=NULL,*p,*s;
+ Q& I# Z) m3 Z- n# l int i,sum=0,count=0;
: q6 V1 x F/ y% U0 D clrscr(); //清屏
6 ~& d* A, n* H+ n p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
. z* R; z, F0 Y4 R+ ^ p->number=1;p->flag=1;
7 A& F+ t3 Y2 f* ? p->next=head;
$ O6 f7 ~# m0 H8 K! F; F1 G: } head=p;
3 Z/ y8 c/ a* P2 S: s4 W# t for(i=2;i<=M;i++)
p: O: T% u5 a& V) z- ] { s=(MONKEY *)malloc(sizeof(MONKEY));2 R4 Z! g* K$ \! L$ u# k
s->number=i;s->flag=1;( Z. }. X, ]: w# V$ b8 \) h/ T
s->next=head; y( q" b5 r0 y. p
p->next=s;p=p->next;
3 j5 ~. t/ f$ i4 S' ?' [ }* S% C* ^8 I4 p8 I
p=head;& U: r( O7 l) D. ?) Y( h$ M; u7 X
for(;;). T- w: w2 `+ h# a" F+ W/ j% C& h3 j
{if(p->flag==1)
8 ?- z6 t4 I3 \) G- }; _ count++;
R( R1 i( a3 g: f R0 |4 Z% r( ? if(count==N)8 \' O2 \, i( x* o2 ?
{p->flag=0;
+ o' _: {6 {8 g& |: \! ^4 z count=0;
8 _. O1 N+ q% u2 Y/ b$ x sum++;}
# C, |( s& {+ P0 [$ k# H if(sum==M-1)
9 o& ^) U$ x$ g7 A7 x8 H! U break;) \6 P) a4 f- V% b9 w
p=p->next;
/ q$ I- |% F9 W( U3 ~0 V% Q) m! e }. B5 E. _( f- L& `, ?
p=
* ]+ [0 [+ M- I head;* _0 O2 F3 O% h
for(i=1;i<=M;i++)
# o5 {3 [" @/ Q; H& N# {0 R$ E { if(p->flag==1)
. Y- a6 T% g- k, i& Y printf("\t%d",p->number);( W, c+ n3 w3 x/ w3 Z
p=p->next;
& W$ z2 A) p% k4 x z8 i' }# b9 Z: } }
8 [/ Y- y5 [3 h" X( u
9 p/ }/ a# T: e# ^. E A6 a7 C5 v: ^6 T! H# ~$ K
/ O" R! n0 o* w5 T6 Q} / b* E; T. E" c7 |3 \) j
第二种方法:数组
% i' U: t4 j0 w, _#include<stdio.h>$ b, D% f+ _3 p n# Y
#define M 8
! N+ j) g$ U/ p3 j( ?$ Y4 Rstruct monkey2 L( G7 k' P" D0 w% m
{int number;
. `( ^2 |* J+ s; [% m3 Q' Pint nextp;/ Q$ t% t+ S# K
}link[M+1];6 E$ f" ^9 L4 ^2 q' T! H# m
; t# p5 w/ K3 l# h' lvoid main() C; `% h! k1 S3 L" m P
{int i,count,h;
. ]! |+ i" O! {& lfor(i=1;i<=M;i++)/ [! @& v% f1 m. t$ {7 x
{ if(i==M)) S, J) u2 r$ U! [ g
link[i].nextp=1;
! ~: w. L% }3 V" f' r n else4 Z% S& |' f$ T2 k5 \ |+ W
link[i].nextp=i+1;
2 ]% Y" B" h7 q1 S) D$ s link[i].number=i;4 R( ~5 l# d& F- K- _, G6 F
}4 J' E! d' p% n0 F' C
printf("\n"); O# C& `. l, }- m( q8 ]* ?: n
count=0;
# u8 `2 `2 ^( Nh=M;% a9 c: \. y! b2 J$ {1 D# P
printf("依次退出的猴子: \n");
" u2 @0 M& y M7 y$ Bwhile(count<M-1)
0 z8 J, s0 k$ P: l$ G{i=0;; H: u, v3 n1 e6 d2 i2 ]
while(i!=3)4 |: s2 G* j8 x- { D
{ h=link[h].nextp;: s) j8 b8 P7 k8 |1 S% |$ p
if(link[h].number)# H9 |( x5 i. X
i++;}8 Y9 K# B, A8 H5 V
% f" O+ R9 R7 Eprintf("%4d",link[h].number);; {5 b/ Q1 ~9 u$ U6 }( a5 W
link[h].number=0;1 s- D' D, R& y" t- z' d
count++;6 V/ q, {, ?5 @3 @5 D
}
* e+ i2 b+ J; h) J, K% u0 I! v) P8 @* I, e- z
printf("\n大王是:");3 x9 w' k/ j4 W* Q! m% c2 A4 G
for(i=1;i<=M;i++)
9 U D" v4 K- B" a1 R$ H9 c7 s if(link[i].number)
; s9 l6 t# d Q; v' G printf("%3d\n",link[i].number);2 L0 a6 ]! a( I
/ X* r4 x, P4 H+ I ]' Q6 `$ a: q8 W( L0 r6 w- t! B* X7 h9 |
}
; Y) n1 B- D; s第三种是普通方法for循环
( \+ `- \$ J: }! L#include<stdio.h>4 }% @% s+ h, d3 j8 d" Q+ l. b
void main()) g3 e3 H$ u% a7 C5 k
{ int i,k,m,n,num[50],q,*p;( k, f& l- P* J5 k4 t. o! b, ~
clrscr();3 t- x, G$ w, |8 W
printf("input number of person: n=");
% V$ u8 d0 K% k; Q$ |; ]+ g- G scanf("%d",&n);- j5 b$ |( H& c/ L9 P2 x; V
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只) v# [2 `5 X1 c0 d
scanf("%d",&q);
# U2 o0 G6 z& [0 f* r p=num;" g+ W# c- ?* i
for(i=0;i<n;i++)9 j& E8 U( `* s8 H" n3 d8 D6 `$ l
*(p+i)=i+1;3 g W, ?! w4 a2 ^
i=0;6 l) ]9 v' `$ T( P
k=0;; B" D: D+ R4 x
m=0;; [+ J/ d8 c1 \4 q4 P; `
while(m<n-1)! k, x( d' y9 ?; X7 K
{if(*(p+i)!=0) k++;
3 f3 ?, Z% g% S$ @5 m& b ~ if(k==q)
4 T0 x. A& g3 G: v0 b { *(p+i)=0;# P" }& B$ n6 |4 {7 J
k=0;
2 d9 {$ @0 n5 a m++;
3 u) d X" m, Y' e2 A }8 _+ _; C7 H; n* s. ]8 Y+ H" s
i++;
$ U/ m2 ]0 L G8 u; C if(i==n)i=0;
/ H/ W0 ?& J. f' V' o7 o/ w; G }$ M; A* w5 W! R! m1 L5 ]6 {% Z
while(*p==0)p++;
7 |- B( z2 {% b3 o( s' [# k" T% M printf("The last one is NO:%d\n",*p);
: p! L5 ?# V6 e6 \" e% [! A getch();% r) U# @3 A; G3 f. j. d
6 O; d/ H6 p0 A$ F} |
|