|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
1 o. J4 T" g" m& `! n这几天我在忙着编一个问题,我用了一种方法编出来!/ B8 c+ k3 G. I
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
% X) e+ b7 g2 r8 D3 \/ a注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 3 H4 U2 k- y' h! k' f& ^: o
2 R! N# b. x% ~* H
3 R* @: Z' Q2 _9 v 题目* D5 s2 P ]. h, t
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
2 ~: g3 U) d) F& b; a第一种方法:利用循环链表4 C {* f$ q$ Z! b4 J( G
#include<stdio.h>
% f V+ c6 d; c" Z* R m5 u#include<malloc.h>
! O+ [) C) p: e' O, F. Q. h0 `#define M 8 //共有8只猴子
# }5 O9 v/ n4 t#define N 3 //数到3只时退出第三只
n) G- \9 q9 C( A6 \typedef struct monkey
& C6 l4 o6 C6 g7 d{int number;
9 r& L# R! I( d* P; g Z% _8 Gint flag;4 A% h+ P$ n; C) `$ r, U
struct monkey* next;6 o7 W2 Z6 O. i& J- ^* {
}MONKEY;
! V8 q$ W& g: s! C6 o* V3 \. N6 Bmain()6 l8 D% a( y$ q( j, k
{ MONKEY *head=NULL,*p,*s;
7 x) A- A5 y% w1 J) Y& |0 f0 d. U+ V int i,sum=0,count=0;
) a) Q. g* n* M8 v% W clrscr(); //清屏
7 k: h/ ^% K$ X3 ?( M y p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存% u: B6 w8 Q- x# Q/ N2 s( {; o2 P
p->number=1;p->flag=1;
' F) E g7 u5 N M9 G4 X p->next=head;
( a7 Y9 \% ~ D9 ^; i& k. p head=p;
6 R% @2 h; k! K* [" @3 h for(i=2;i<=M;i++)
) E5 c0 G7 T2 Q; G9 P0 f/ ^) C { s=(MONKEY *)malloc(sizeof(MONKEY));
2 D, U; E% G( r" ^: d s->number=i;s->flag=1;
: G r# Q3 K0 J$ c1 F s->next=head;& J( j: `% l) m% x. k
p->next=s;p=p->next;% `% w% K3 ?+ \/ y2 _6 N j
}
: T4 h/ h% Q# A# h p=head;
4 B! B [; m) U for(;;)# w5 }* g& A8 s$ s
{if(p->flag==1)
2 D6 X* [; @; G2 L count++;
8 Y% p, T; Q) j: x9 \3 ~3 {5 a7 Q if(count==N)1 E) t8 M9 i0 k/ ~; }' j
{p->flag=0;+ d6 Q+ Q3 q2 z5 T
count=0;7 {4 M( I& l/ Y g3 P: L
sum++;}" u- [' |2 E) `* H w4 G
if(sum==M-1)% y& G7 ^& Q; Z( ]7 P% f. ?
break;
( B" {# r7 f) ^& |/ E p=p->next;; s' d/ \% W Y, e9 }% a+ b: h4 m
}: H }1 y- ` G. B6 L0 C
p=6 L( E! K: L1 o7 s) B2 |
head;0 z) ?) L( L+ W4 u4 ?0 Y6 [
for(i=1;i<=M;i++)5 S8 Q: M2 w4 v) Q4 t
{ if(p->flag==1)
, W2 K' |4 u0 k printf("\t%d",p->number);
* F! z& o, `1 G3 Z p=p->next;
+ P9 ?" X& B# {( ~; L# b, i' n }
. r' l$ Y9 q, K6 f& b: t: |' @ ~6 M. C# p
3 _+ E- u5 k) N; F2 U. m$ D; Z
D5 o( o( V* e/ i/ g- y; Q9 `
}
& b: [# j* ?/ q$ f( n ]第二种方法:数组
0 D- L5 w. K9 t7 P$ n#include<stdio.h>
) p; h, W, F* k7 q( U#define M 8( T: D3 }( P+ F: _4 L2 `
struct monkey: X3 y/ x! a5 `
{int number;
2 M/ |! w# m- L1 Zint nextp;" Q$ y" {' F3 g5 i: E3 w
}link[M+1];# c4 A; O* [/ l; H: A9 i
+ G4 o" i2 o* V& y( kvoid main()
' I$ \9 D4 j5 `- p H; {! l" }* H5 P{int i,count,h;2 f4 X% c1 u6 F1 ]3 w: B
for(i=1;i<=M;i++); L# t, i+ E0 U6 n; i3 f
{ if(i==M)' V) g, D/ F9 _1 B6 M7 \- |
link[i].nextp=1;) I$ C1 Y. E. F' |: r1 X' a4 O7 Z
else& q) ~: c3 }8 i; A
link[i].nextp=i+1;6 D* [, N7 p4 y& U& t0 f: k- `1 \
link[i].number=i;9 m# m( A( G3 [' N
}
1 k/ {- t; M9 i( b+ Zprintf("\n");2 X% H" ?* K$ @
count=0;6 h* P9 C: c6 m3 Z) u' V$ N
h=M;2 q+ Z5 B- v8 h0 u5 [0 C, p: e
printf("依次退出的猴子: \n");
% E& e( ]6 Q; i0 z& a5 p: zwhile(count<M-1)
5 b2 U ~% c D{i=0;
$ I% d- E+ r8 V. {( b" Rwhile(i!=3)9 d1 _/ B6 x1 x4 p7 l/ Q% x- K
{ h=link[h].nextp;
: ^1 `$ ]1 B) x4 Y9 z0 M/ { if(link[h].number)
* _ T. d X: i i++;}% G! M7 c. n6 f
, z0 ^* {/ B9 h2 G* {8 ~" @printf("%4d",link[h].number);: l$ L! x' c+ P0 f0 L- ^+ S% O5 p
link[h].number=0;
1 F4 Y$ ` @0 A" ^count++;/ x7 ^6 u) B- }3 h- Y) P
}
& \: P7 A' s" ` J7 v8 N# E+ b2 z3 ]
printf("\n大王是:");
) I# ?9 p+ E" V+ b8 S4 R for(i=1;i<=M;i++)' g( W4 X- a+ y3 j# k v( ?
if(link[i].number)6 y; v. D$ ~8 X1 ^/ f9 O
printf("%3d\n",link[i].number);9 F! k0 w7 W. E8 x! Q
2 @5 v! [, h! ]9 `; V5 J8 c5 z$ E$ k* ^) a8 B
}
+ C1 O" L0 G7 X1 x( }第三种是普通方法for循环
; n( j/ C8 C2 {#include<stdio.h>! O( o2 k, R! q' |2 q% Q
void main()' _, `. Y- ^3 d( h$ }6 v5 B' B
{ int i,k,m,n,num[50],q,*p;
( u$ F( \, Q3 R0 k clrscr();
/ G% l( M) z% O, E( B+ @( F printf("input number of person: n=");
2 d! s3 T+ F( v scanf("%d",&n);8 E4 @! }' i' k+ h# |2 }
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
5 J+ h* J; c$ e3 _ scanf("%d",&q);
( h7 P4 r7 O# J/ _5 [& p1 [ p=num;, \6 p! P; ?1 Q. B! M& }
for(i=0;i<n;i++)/ P* s e' c/ a1 O2 g4 A7 K
*(p+i)=i+1;9 F4 \9 O3 n7 v2 ^+ v' N& T
i=0;
; X! W4 M4 w2 L1 [" J k=0;) X- W' l5 W6 g4 {% a" G
m=0;
9 p- p* |4 U1 F! j9 j while(m<n-1)
+ V, x7 @0 o$ F5 ^9 ^ {if(*(p+i)!=0) k++;
6 N2 P4 w. l9 H$ ~7 F2 w& @5 _. ? if(k==q)" `. B) s% [2 \1 j
{ *(p+i)=0;
, @* u3 w7 \+ d k=0;
: {& C0 H( @' |4 P9 L m++;
5 k) T. O! Y) E* A7 w }' A* z6 X, A' l- J
i++;# o) m' c+ a) W7 d2 J) S
if(i==n)i=0;
- q! t3 \2 e2 i6 ?' Z }
0 x5 G+ h4 _; D! T2 e- U. y' A while(*p==0)p++;
5 M% \2 G0 r, D printf("The last one is NO:%d\n",*p);* P/ M' ^) Y& z7 y+ `; m
getch();
- m1 r* ~: _3 n! ?6 o: F! v
' h& a' T" O2 a% W' h" ~} |
|