|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!( u( p1 h6 O. E# U" v" w
这几天我在忙着编一个问题,我用了一种方法编出来!
* Q" Y7 L2 X% I但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
# ?& s) }7 ]- [, V" N注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
% a" S' i a% y. C( G& W. W' ^
: X2 P7 E" X0 ^
; C1 j7 q4 `& a9 J6 x$ x% z: Q 题目- I$ V* t+ t- x0 t
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。( \/ K2 |$ q# C9 R! P' c+ Q8 d
第一种方法:利用循环链表 d. ~5 s. S v( T
#include<stdio.h>+ p$ ?' S* L4 x; d. `
#include<malloc.h>
. E8 d) i- v+ S4 H+ q& F#define M 8 //共有8只猴子 W% e# h0 e9 n& Y, a
#define N 3 //数到3只时退出第三只- N) w, L. y/ Q1 i( X w
typedef struct monkey
8 Q; @* p3 d6 t+ m% X% Y{int number;
/ q' P& z) ?3 ]/ ?+ v: Q! K. oint flag;
3 ]$ r/ D. p/ x+ E3 \2 j xstruct monkey* next;
' q W& \% c0 Q% z3 y0 J) A# ]& t}MONKEY;4 Q7 `7 n# d; ]# {3 u
main()
- @& i9 |1 ^- d" P{ MONKEY *head=NULL,*p,*s;' J$ P$ o& n& w, p$ Q; g
int i,sum=0,count=0;
6 W" M7 d' ?5 B& a7 C clrscr(); //清屏+ y2 A- P+ g7 _' X
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存4 K8 Z* P* R* I
p->number=1;p->flag=1;
7 N" {4 M' R# {5 h% |& X p->next=head;. Y; `* q/ D% `4 D& k
head=p;
. I+ C2 [1 |* j5 g4 X; ^. e* Z for(i=2;i<=M;i++); R0 K) v/ N0 Q& I E) C5 h
{ s=(MONKEY *)malloc(sizeof(MONKEY));( }. \# |& v+ D" w, s. m
s->number=i;s->flag=1;
7 r" Z" A, J" f6 | s->next=head;) o5 ~, Z }: {" \; D5 a6 [
p->next=s;p=p->next;; q n( `$ S* y* m$ d6 }1 v6 o
}/ E& [, [; V* Q
p=head;
3 v6 ]$ v0 B6 f for(;;)
' t* \2 x3 Z y$ }$ t5 I4 G& A {if(p->flag==1)
, [$ q6 K8 q$ t& ]; y. |* l# z count++;. n) x( S; Q L" ]0 A- i% |
if(count==N)
# ~1 q9 @0 P& _( m; u7 e {p->flag=0;
6 E* z+ H2 N& k8 y* `3 h count=0;
, N$ C6 Y* a# V* g, G8 U sum++;}9 o, i- Z: V; i8 y G: f
if(sum==M-1): |% i" x' D. _5 w* n
break;
1 z5 u: }# \2 w& D; s1 ?# V p=p->next;# }% G" A! o4 U% ^3 M& l
}" ~% k, x, J9 O2 }9 M1 a/ \$ V+ M
p=
4 i; ]) m! i7 A head;
6 a4 Z: [# f' u4 }: J% m/ i; { for(i=1;i<=M;i++)
' Q' c. a# v! U# M/ | { if(p->flag==1)
5 h3 p0 k4 A' L3 {. h0 v; \7 G! G# x printf("\t%d",p->number);
. r( M3 d2 H% l' E p=p->next;
" j4 c3 m; z( o2 a$ ?. r. c7 A }
5 Q5 ]. S& [- h: @7 x2 w
+ v p- Y/ v( O/ X
& f) H$ z+ W$ F& M: c1 S) O+ @& C5 r
}
; I7 v5 n2 c; c0 p5 Z, F- m$ K7 ?. A第二种方法:数组
. \) [( G J Q- D#include<stdio.h>
9 R7 o" \' m" Z0 P4 g W# U#define M 8
' M1 j, g& E% ~: D+ ^" Y6 Ustruct monkey
h! J4 }2 }4 F. ^& s' V{int number;2 m+ m9 A6 A3 J- l" [
int nextp;
; r5 [- O" [5 _6 L}link[M+1];
. K' A' C$ G9 s+ g9 x- o; p% i: [7 i) `8 X% h4 V
void main()
( b/ g8 B) [: U% Q9 z$ x{int i,count,h;% h8 Q: L0 N+ L4 V( N+ b
for(i=1;i<=M;i++)
9 F# q4 e4 w ` s{ if(i==M)
. x- u& Z9 d4 e# h link[i].nextp=1;) D" w, G8 _- _( K0 q" g( k
else! z3 \% ?* E k* {# U
link[i].nextp=i+1;
3 r5 k4 E, f9 T9 c link[i].number=i;) m5 y+ ?6 ?5 ?* a( y0 f- a J2 j
}9 S! U* g! g" \% y G3 [8 g' @
printf("\n");
x9 \9 {- k, U3 {count=0;
3 b% N" ?7 z, S3 r, uh=M;
# V, V `: o. gprintf("依次退出的猴子: \n");7 @. U; ?: M. _0 c: Q
while(count<M-1)! s. e5 \% }8 |5 e L
{i=0;; m2 _- E, u7 q3 g' Q
while(i!=3), _. t$ S: ] `# w0 x
{ h=link[h].nextp;: y* f! [) \' L7 X/ A" L) N
if(link[h].number)
/ a" \1 t+ r6 J( B i++;}) i. g8 a; r6 S( z- ?( T* Y
& r) A! \$ X" W0 D4 Iprintf("%4d",link[h].number);1 {4 l0 D; ^- |7 \
link[h].number=0;5 g2 }( d" j/ N$ n
count++;9 x" p' ~2 k$ P# F8 n( T
}
# W) O6 a' g* a! _ V7 {+ {( e( U8 ^9 p! _; p, r4 @, w3 Q2 q
printf("\n大王是:");
* U& {, A0 d$ F* f" h9 V4 f for(i=1;i<=M;i++)/ A( C( Y7 } p2 W0 s, E
if(link[i].number)8 J- |8 I2 S# T. p5 G! Y3 _" _: Y
printf("%3d\n",link[i].number);2 k" E, Y# U3 K
1 i- {) \* B4 B1 v9 q- m# n
( Z$ l" p7 G, a6 s/ f2 b! q} " h/ ]; }. w, z8 f2 h4 b
第三种是普通方法for循环
5 G% s: }2 q' e! z#include<stdio.h>$ Z8 O& }# S1 v: y' q
void main()
" R* M9 v) b- T{ int i,k,m,n,num[50],q,*p;
5 Y o# b2 X1 J: o4 M. M G clrscr();
# |9 K1 Z$ z' r3 u printf("input number of person: n=");
! G/ b3 e2 w; Q. U4 E scanf("%d",&n);
9 q6 b* R/ \" `* M8 b. @printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只1 t J3 O4 R8 r, a0 \6 \9 g
scanf("%d",&q);1 k9 ]: }8 K& z+ S1 G5 }& L
p=num;
- N) i; n$ w; }# c' U) J4 L for(i=0;i<n;i++), t0 E. a+ f3 l/ o
*(p+i)=i+1;
& B# z# J3 N1 C" C$ ^8 H9 V# F i=0;$ ]+ o$ P A2 K! I) O* R5 T
k=0;4 K6 R8 S/ J: Z/ p6 n
m=0;
! o" A ~% x! T while(m<n-1)- d6 A6 a+ M. e# u- O1 M
{if(*(p+i)!=0) k++;9 c* a& E$ A* }; _6 ?
if(k==q)3 j9 I; e/ @3 P3 @+ w* c
{ *(p+i)=0;
: F: g- H3 R! }1 F3 |( m k=0;9 C. P$ D& |" u5 c6 P
m++;
" Y( e5 r- J& ?2 t- B; x K }& t, \- G8 t) i+ T
i++;) D2 R8 H1 T/ s p8 ^5 q
if(i==n)i=0;
. m1 ?! @# l' O3 G }
, N0 y' E+ v& R2 W' T while(*p==0)p++;
5 a" \: | b7 m. D printf("The last one is NO:%d\n",*p);. n7 e& Z5 v X `- a! @
getch();5 g# X1 c5 F1 q6 X N
: ]& C" e- e% C& O+ x& d
} |
|