|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!3 B0 s- c, r+ l8 x) @
这几天我在忙着编一个问题,我用了一种方法编出来!. k9 {* H" K2 J: O; o; b8 h
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
3 O5 D, U2 q( j0 D" E注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 5 T6 e' T! C' f) z7 {: w8 F
3 G1 f" Y: z. V# [! x
) Q+ U$ c5 r; a4 T7 u3 E8 a' @; _ 题目
& }) i3 ?# o! |& ]/ O' l/ c( j1 \山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
2 M5 d% W! {8 C1 Y, f+ L6 K第一种方法:利用循环链表* E/ K1 O* ]+ ~0 C9 K" R0 B* P
#include<stdio.h>4 Q$ E' b$ X0 A1 c
#include<malloc.h>
# m- j- Q! h L#define M 8 //共有8只猴子, Y4 ]/ y2 b F4 Q
#define N 3 //数到3只时退出第三只" \# t' @9 Q$ ^- ?4 O/ X
typedef struct monkey
4 ], i3 F! Z5 }{int number;" A3 _2 O. |5 T4 N2 T8 X+ T# i- S
int flag;
/ L1 C& Z# I4 kstruct monkey* next;4 z4 n; M- h9 y0 A8 k6 U8 `
}MONKEY;
% X* r' `" n6 Omain()
. d# F7 G2 o$ J( q{ MONKEY *head=NULL,*p,*s;$ J2 _, S3 [- y9 w# e; U' L' u
int i,sum=0,count=0;9 ]: a/ v4 b+ Q: L
clrscr(); //清屏
/ A8 {; h: Z, D$ d) | p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存1 ~- N B" n& N1 i
p->number=1;p->flag=1;
# o$ m7 p& ]- J D. L9 u p->next=head;
7 Z% \/ x+ z. N head=p;$ X$ d9 t, s4 ~) ?& \+ ~' K
for(i=2;i<=M;i++)8 ?/ e: b! u- A# u( \5 T4 d- Z: ?4 M
{ s=(MONKEY *)malloc(sizeof(MONKEY));
5 L9 B" q. ~* ~4 r s->number=i;s->flag=1;
8 n7 D0 o/ P; q3 I& d s->next=head;2 g X; Z( N/ ~7 u/ X( G1 S5 \$ Y
p->next=s;p=p->next;6 |% z5 b8 S5 j# @/ e
}7 W* V3 t" X* D* f
p=head; ^ g* E/ g. o0 R
for(;;). y0 V4 f& z8 d7 x
{if(p->flag==1)
$ x ?3 w, Z8 R% Y3 T, Q count++;
( q' i( Y j, r7 L" R) g1 v* B if(count==N): y. A0 H" ]; E( P1 R3 Z
{p->flag=0;
% V0 R5 k+ o' k2 W4 S count=0;
* X: X- v0 G) B# Q: F1 F sum++;}( c! |# M Q' t
if(sum==M-1)- ~& c0 y2 v* K
break;
) e4 a( T q1 B- Y o p=p->next;; V, J7 V" B/ ?7 Z. @
}! z$ f8 o1 ^+ S1 [/ a! X+ |
p=! ?+ z) R" T; f* r; c: I9 L L% k
head;0 e* d3 \, _* u: {0 H' k6 O
for(i=1;i<=M;i++)" L! g! L* ?6 U4 u
{ if(p->flag==1)
/ G1 k7 j) T; Y5 M; e8 W | printf("\t%d",p->number);+ j) Q, Z$ d! d
p=p->next;: C0 `$ k3 p8 x, a: D0 S
}
9 R6 d: E4 K. H) Y! m3 L( {1 T7 d6 a$ ]: w3 F: i/ Q
6 g# S! O5 X9 A j+ w6 T. a0 u$ T b8 M3 I! K$ C/ E! Y$ v7 y
}
2 `# K7 _$ x3 k& T" X7 x5 I9 o第二种方法:数组- k9 G0 j! o8 y3 m
#include<stdio.h>
# O; H( V6 @8 N. U; x# r2 `#define M 84 a( s+ E8 I. n8 F! m
struct monkey9 Q: P* _; v' f0 V; H$ ~8 j
{int number;
|6 c) E; u X3 Nint nextp;7 ?% w& E2 l! R% h/ @% |
}link[M+1];& d2 m S* B- e A$ D; X$ b
2 j+ e% ]; a6 i) Y1 S3 s7 M( C8 d! U+ ^void main() A/ `/ a6 c+ Q5 z& c
{int i,count,h;
% E- t; H7 |. F" h6 P7 Q+ \. ofor(i=1;i<=M;i++)& ^- @2 Q" A1 D# s+ u
{ if(i==M)
M/ P3 @) C+ k1 u+ v link[i].nextp=1;
9 n5 q2 W) n G0 W$ x) O) ^ else8 O( Z9 a+ `3 ^' y, P
link[i].nextp=i+1;4 g& y% M0 v+ h) U
link[i].number=i;6 c) U+ {6 Y a5 J2 l L
} c. b$ S; i0 f* Y" q2 F ^
printf("\n");: y, F/ R1 q! {, ` j
count=0;
' S$ H* Z0 w7 t( j9 h5 I* |. eh=M;* N5 J/ ^* y! j X$ x7 L/ E
printf("依次退出的猴子: \n");; |+ F$ K9 i; \( D- R3 U
while(count<M-1)
4 i$ W. F: b( t{i=0;
5 T4 u0 i& a( q8 U6 J9 S* Dwhile(i!=3)
) r A4 M5 m& }' o4 U{ h=link[h].nextp;
$ S8 }% s" y+ w) D" J if(link[h].number)" v- e. i! o0 |& w
i++;}# c7 z: K/ [4 q* N% P+ Z( |
7 g1 @( `+ v; X! B" x' r
printf("%4d",link[h].number);8 ^, \3 Z: a q2 T
link[h].number=0;* x/ P W& B! K a/ E
count++;
; V; |9 w! d( Q2 w}8 u [" W8 F6 V* T3 u
2 q" S% e A& Bprintf("\n大王是:");% ]+ q7 c7 K3 j7 O
for(i=1;i<=M;i++). M! S! |# o- X, R" R& G
if(link[i].number)" S' j* ^8 L; Z
printf("%3d\n",link[i].number);
7 W. j9 E9 V' s- q! t
' t6 H: c" X) J' }
, q Y+ Z% m( W, c) n. v& [+ h& M} 0 L8 N4 D8 _ _! x
第三种是普通方法for循环1 B5 i( Z1 B9 |2 o, C4 }. k2 f
#include<stdio.h>
( S* G" Z7 E0 r- T* G e, t& {+ bvoid main() n. {3 R5 ^3 U5 O. ~! P
{ int i,k,m,n,num[50],q,*p;
2 h6 W9 ]8 L; u7 D6 n' m clrscr();: D& M- v: O% t& S
printf("input number of person: n=");. ^* h8 j0 U% S- @! y; q2 Z
scanf("%d",&n);' l+ N7 k, g& K8 i7 D" g
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
. e7 m: A( l* ~! z scanf("%d",&q);
" \+ ?3 [; L0 S. f p=num;. U& s" `$ }* Z4 I! P' k
for(i=0;i<n;i++)
5 I* {9 z. `2 G" V% S9 D6 h) u *(p+i)=i+1;- S4 _, E- V! P- I7 E; c2 a2 `
i=0;
# o6 Y- W# H9 \4 G" T k=0;& j: x! U& Y8 p4 X; e* Y% W$ e
m=0;3 |! J! V3 W& b9 o9 m
while(m<n-1)) ^1 C: p( n! L; `" N1 G# @
{if(*(p+i)!=0) k++;; ~# @+ d) p* }1 {( d) S1 M! b
if(k==q)9 T& [- v+ e. ]2 d9 ~
{ *(p+i)=0;
$ p9 v1 u$ t4 b' N0 L: [ k=0;
1 \/ `$ U p% b( f m++;
1 T1 u2 }, D" U4 }) K$ h5 q }
) o' ? n3 ^4 w: ] i++;
( H- }9 q+ h$ C3 T/ l( }7 ? if(i==n)i=0;1 I$ C, \ v0 z3 l: n% k, _
}0 U' e# |6 R. C' `! p& |. W
while(*p==0)p++;% a. n% Q* P3 {! w" _' X6 \' V/ k$ V. J" m
printf("The last one is NO:%d\n",*p);0 i' ~+ q" s4 r1 S
getch();
2 o) X1 C# M9 b. ` G" ~/ z$ U1 {2 o0 a
} |
|