|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!+ K5 T# C( f: U {
这几天我在忙着编一个问题,我用了一种方法编出来!
9 a& C( E, e" |1 v% g, n4 J2 |. _但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!. r% }: y5 I2 s( t# r6 ]
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 # Q' g3 F# N+ b( @& Y+ m V
; d9 d7 e j" v, V
3 n5 R0 q- W6 d1 c0 ^8 l& z( O 题目
k# X y2 X- I i+ z山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
; x8 C0 ?' n0 t; f第一种方法:利用循环链表
! W [: g0 _. x+ T' o#include<stdio.h>
( O" u" D5 n6 f5 R9 |#include<malloc.h>' v. S! F! J; _# J: h8 h$ z
#define M 8 //共有8只猴子
. w& [4 i- _$ ?; j! O; |6 |0 y#define N 3 //数到3只时退出第三只
/ n; ]' j7 h) J+ t1 Ltypedef struct monkey
( H/ R* k& `1 J! s{int number;
7 T/ s B4 E2 Bint flag;( s# e+ y+ e: r3 r, D9 f
struct monkey* next;
# w: r, ]% T I5 I9 }- t}MONKEY;
8 T) M9 M" f y; H x! wmain()
* b7 t ? x4 X2 d. G% I* L f{ MONKEY *head=NULL,*p,*s;
5 Q7 K5 N5 U# W) \ int i,sum=0,count=0;
2 h. _* O/ z8 y3 V& \ clrscr(); //清屏
5 }5 C7 Q8 g) @" h1 w) @ p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
( j# v" U) F; c5 _7 _ p->number=1;p->flag=1;
I" t/ h* b. @- L* [ p->next=head;
8 i2 q& n; P. j/ u; ^7 W- A: m head=p;0 l8 I( v3 h9 Y! \6 M0 X6 j
for(i=2;i<=M;i++)) r' u% q/ K# W: j
{ s=(MONKEY *)malloc(sizeof(MONKEY));
( r# x0 D+ M; S* A" g. r# K s->number=i;s->flag=1;
6 @& V7 } x1 J" T% u6 Z s->next=head;$ }/ Y8 S' K, l1 P
p->next=s;p=p->next;) m) ?6 Q' N) T; `9 M% n5 J. g
}2 d T; K: D% s( P9 z3 y4 E
p=head;
+ K5 q+ `% w" n& I3 n for(;;)
0 g) o* j& H" o( Y* v( Z {if(p->flag==1)7 K, z* Z. O8 E4 g* X! b! W9 g
count++;
/ ?3 R7 _' n: S3 I! \ ~) u, p, |5 r if(count==N)! |0 b3 U" r+ S5 k+ s \5 D+ D
{p->flag=0;$ E; ^$ o$ _( v& Z2 ~2 J3 h
count=0;8 Q; h8 ?# e `2 Z6 b$ u
sum++;}
) }. `' o/ I( [! f- h* ~7 F9 J. t if(sum==M-1)/ E7 F" X/ o$ W9 T4 d
break;# e8 x8 O& s' A7 P0 X
p=p->next;
8 D8 a2 S; Y& `" i, H& ^4 ^# K }
. ~# L3 D" W' V9 s6 p p=
6 p. q& T8 P; ? head;( ^3 n N( l- D) q" r$ D& n
for(i=1;i<=M;i++): d% ?' a: {3 z+ C; }7 j
{ if(p->flag==1)
7 E% z: r" Y8 q6 @# z% w printf("\t%d",p->number);% _ _% Z; S6 X* d8 ?6 Z/ y$ v
p=p->next;
/ a+ o% k9 G, b# x }
/ F6 ~+ h$ C/ s5 [# R' b: a( _. m6 ~3 I( V5 s
' S' E3 K% \1 z% b) M0 v
6 P/ o t$ ~7 c2 D/ n) V8 k} + B$ A" }, M4 W; A6 A' d
第二种方法:数组3 y. ]. ~' {( g: q7 L) a
#include<stdio.h>
0 y n9 n2 h6 N& |" Q#define M 8
; J N$ L2 B9 [ u$ H2 Tstruct monkey
, n: h. E* G- K3 D% q{int number;4 t, z6 e, N6 r& n
int nextp;
! \+ I: a6 Z5 b) d}link[M+1];
, m d; P( ~4 E1 J
+ y8 ?. I: `. `- I. c% T5 ?. |void main()1 \7 W0 a& I* Q( l H# Y
{int i,count,h;
0 Z1 I5 t3 A5 t. G4 T+ Pfor(i=1;i<=M;i++)
+ x* A$ u2 v# `% ?% x{ if(i==M)
1 M+ Z% ?4 P# Z( d# `5 ~ link[i].nextp=1;
) j; c- p7 N7 D8 W8 N else
" @1 [, T. A+ a# L- y1 V4 N" v# y- s" e link[i].nextp=i+1;8 n: x9 _7 e& M) I4 f! ]
link[i].number=i;
( u5 p1 T" [5 K b5 I" { M$ r}0 E# ~4 R+ P1 j1 j) t- K
printf("\n");
- g6 b7 E7 d0 Q5 M+ acount=0;
, [# a {* v- v8 m$ sh=M;5 E9 u4 _; l& `( i' h
printf("依次退出的猴子: \n");& V$ J e. I8 M% a# C5 u1 j, H7 b. {
while(count<M-1)
) h. z0 t. W0 x3 O& k/ f/ v{i=0;
$ w, {; I. ?; n$ b( X: Qwhile(i!=3)' y7 y" r" J, [+ `1 _# A, z
{ h=link[h].nextp;
0 e% H9 a: R, } if(link[h].number)7 I6 A5 j' Z& [5 v2 O+ Q* u+ h
i++;}0 m$ g) j) v. T) R1 @
( v4 t S, ~( tprintf("%4d",link[h].number);0 e$ y Z$ r9 M- C3 K0 l* `
link[h].number=0;
+ r- @: J' m4 k* \* hcount++;' ^/ F' {5 `( g" V2 C/ z: i
}
6 @- o1 T- H+ Q* K" z; g. k
, c: T% q- G4 R$ t) lprintf("\n大王是:");
% k7 }3 O0 j4 ~2 H2 G, e. ] for(i=1;i<=M;i++), R' {, F* X3 M% I
if(link[i].number)& H4 h' \8 B; Q
printf("%3d\n",link[i].number);
# l( ^) {( W6 i4 ]; [$ g1 F8 b0 d! Z4 ~! r
6 k0 b, c; E/ z* p
} 8 ]" @! z+ k/ p1 h
第三种是普通方法for循环" F' A% o! c, ]6 z3 H$ m
#include<stdio.h>' t+ D- U2 j! i0 o
void main() u) f7 V" s7 U) i
{ int i,k,m,n,num[50],q,*p;( U3 f$ _# h$ {4 C+ Q: U) y: M
clrscr();
7 A' J! J- L/ W3 W/ {# B! I" x printf("input number of person: n=");) A. m9 Y2 N; ~4 u) p, C
scanf("%d",&n);0 U3 |4 e6 r* y0 y. |( q# b# w
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
. ]* h4 w# O2 @ d) S. {% J9 E scanf("%d",&q);
, l; A5 x: Z; V6 M p=num;
+ d7 n2 I: q( B; J' w$ B' B" ~: m* ^ for(i=0;i<n;i++)
$ _" U- p0 v+ ]; r1 J. W, v: [/ x* m2 \ *(p+i)=i+1;( S X1 F8 ~( k/ h' G U
i=0;
# m; i/ {0 d' h k=0;
! E$ b, l! K; l! ] m=0;
- N/ j& W* h9 e y& N0 @ ~ while(m<n-1)! T7 r+ z. i1 p( Y7 L$ @
{if(*(p+i)!=0) k++;. A* X7 o" C3 b5 u# @; P1 s
if(k==q)+ D8 e( |0 X& O% K* ~& n3 t
{ *(p+i)=0;% D3 l# A! Y- J: C
k=0;% R. T$ N8 r8 e S6 V
m++;1 l5 ?; d: }, n7 C9 y/ y
}
# j6 I: P, a4 B! V) U! U i++;
B# T% `4 F. i9 n1 u3 ?! v if(i==n)i=0;
2 p! Y9 ?! ^) O7 _ }
4 `/ S7 n9 x0 U1 ]4 Q) K while(*p==0)p++;
7 Y @9 u5 ~1 }' ^5 Y9 L printf("The last one is NO:%d\n",*p);
8 W9 B: Q% |. e* a getch();; i. q. D- ^" I P5 t' u( t
3 R- U/ n+ J _5 r! S} |
|