|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
" e- ^; ~; X$ n* K这几天我在忙着编一个问题,我用了一种方法编出来!* `, I5 `6 P! k
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!# s6 J, X" J0 L8 T
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 6 O. A6 A! K/ i& }4 [% n- ^; B
6 S* {) y1 z0 l+ R8 K
& N7 q5 x; W0 ~
题目2 W; [' P6 i+ a! e; P2 h" i
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
5 v4 b! F W3 s! v c3 m7 k" b第一种方法:利用循环链表' k$ r8 ~, L0 A \9 `6 a
#include<stdio.h>
# E" e. A$ f; h2 f" n. W9 \ k( n% u#include<malloc.h>
- c# n- `: d* b" M#define M 8 //共有8只猴子, H( C& ~( G {( l0 w) x) R
#define N 3 //数到3只时退出第三只
! r, \( w8 W) {typedef struct monkey
8 C7 k2 H8 [1 J M4 J x{int number;- T& R0 D' z7 y$ Q9 K8 u
int flag;6 ^6 H. X$ Y0 k! [9 D1 ]- S/ F
struct monkey* next;. O4 x0 L, T- Z5 W0 c
}MONKEY;( l$ X- n! E* d# ~, q2 b, r
main()
4 ]0 u" ]3 j- w{ MONKEY *head=NULL,*p,*s;: X2 Q) ]( f* A' ?! _6 F' c" {9 W+ t
int i,sum=0,count=0;
, F% a; M# r' } clrscr(); //清屏3 l3 V* f' ~1 ^1 [! j3 s2 _5 S* B
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
# Z4 x5 ~$ l) O' [" E8 I& | p->number=1;p->flag=1;
& L( x- c, J- n p->next=head;
9 g6 Q3 f- g/ \! p head=p;# L) k3 r8 R+ u4 a
for(i=2;i<=M;i++)* X, T7 O. A! H5 @. v& k& ^
{ s=(MONKEY *)malloc(sizeof(MONKEY));
2 B1 T6 K X* {1 m; j) K4 N( E6 C s->number=i;s->flag=1;; K, y) e6 N' `- P3 t
s->next=head;. d& D9 ]( S3 S! k3 d8 h/ ?; L
p->next=s;p=p->next;2 e$ e) S; s/ f$ H* k/ x
}
* R; }" ~! J( i p=head;& {5 u7 V/ K9 H0 M `
for(;;)
9 }- a( T) ]& ~! c {if(p->flag==1)1 S+ }, N: |9 f, T
count++;- W0 _/ J& b! Q( Z V4 M0 R
if(count==N)
) M; [- ]. W/ p3 j2 i% @ {p->flag=0;
, M" T5 \ r9 Q5 L7 Q. }: z count=0;
- u3 a" h/ t. ]: z5 F7 M; i sum++;}& x- d' |0 ]' M' E- M( {3 ]
if(sum==M-1)! d! y! \ v, _; h4 n$ |$ h; U
break;" d, A- G. v5 T! m- b
p=p->next;" w; \, x, h* m0 _8 V$ s4 z0 u% m
} `, o4 I7 h( n+ b' [
p=' \1 F# C6 O V7 ^/ l3 j
head;
2 Z0 m( Q. q y' ?2 ] for(i=1;i<=M;i++)9 r1 F+ u, Y2 A+ Z X# R" L& O
{ if(p->flag==1)' N0 u" u( Y1 Z. h3 d4 j
printf("\t%d",p->number);: o7 S |5 A; E; M9 p7 W/ V' ~. _* y! {
p=p->next;/ b, |6 T1 V. G o2 u1 u! g, T4 c+ y
}
- \, F0 D E- ^6 h9 q. ^) R
: _1 ]2 F1 }+ g$ V' g- A! I: w+ W9 a$ V7 v2 X/ |' _
. u( O, A- K1 S3 g! ]}
5 b& M; }2 a. R; \第二种方法:数组
, F. ?0 E; v! U d#include<stdio.h>
; m8 F7 I0 O6 e% L0 ?9 f#define M 8
: s3 ]6 r5 C$ k. r6 ]+ ], Ostruct monkey: P& [! S5 I% |; \7 E: C3 U
{int number;% z$ w- G6 X+ S: u4 I6 D
int nextp;
) O7 \, f9 Q& p1 ~}link[M+1];" }& V$ i0 n8 L6 x
' J1 G5 Q( W& ^$ l' ?
void main()
3 X' G E. K: s4 j1 E+ `{int i,count,h;
1 ~4 A" ^6 N8 [+ X4 g! ]& j+ P" Sfor(i=1;i<=M;i++)! B4 F( }( R, e$ w/ f( v
{ if(i==M)
* B/ n7 o6 |! ~# X) W$ R6 x: @ link[i].nextp=1;
3 O$ y D j, `2 v2 t N- N else, V k6 `2 r* Z& \, U
link[i].nextp=i+1;
6 B0 b3 w$ @% N8 W link[i].number=i;1 q. J! K W8 a) n5 I( R% W6 F
}& Y i& ~; a: R0 U
printf("\n");5 G2 B4 S8 i! F) I, j4 `0 V
count=0;4 J' b" V. P9 ^& r' S
h=M;9 L8 \) j1 y! \; y# f$ ^
printf("依次退出的猴子: \n");' b U! m5 o" N, T( \7 J
while(count<M-1)
5 |$ N2 m7 Q' e/ R{i=0;
5 Q6 ^8 U* o$ s( o& Bwhile(i!=3)$ ]3 P9 N- m) M; I) W5 \* h- X" d5 y
{ h=link[h].nextp;) ]& i. f6 E; a7 Z
if(link[h].number)' `. G! Z9 x9 e
i++;}! s: T. [1 j( G9 U0 D8 {
x7 t6 r. ^* _+ z3 t
printf("%4d",link[h].number);
) q% ]+ L+ T! t9 Qlink[h].number=0;9 @; D1 d, ?6 \
count++;/ @! H$ Y/ {/ @" k0 G, q' [, C. F
}- |" C7 F6 [6 Q9 p, {4 a) F+ F
. z% F. b4 `4 t7 c- s! q
printf("\n大王是:");- Z) j& a& u0 y* ]1 [! X/ s. T
for(i=1;i<=M;i++)& t4 B5 N% N' O3 m) z( k3 P
if(link[i].number)5 t- f3 n P, p; L% W
printf("%3d\n",link[i].number);6 v2 r+ n9 S9 C! H# c+ d
$ o2 g+ K5 F3 ^6 q6 L2 e& X6 \7 O6 Y1 H2 }! e" k0 ]: @+ l
}
) L% q8 Z- m G: o# p# T第三种是普通方法for循环7 R) ~# G l7 b' d( C
#include<stdio.h>
8 ]8 S2 R2 q, k' p. x4 uvoid main()2 e4 P5 g( D7 G3 t `. p9 C
{ int i,k,m,n,num[50],q,*p;. ~! ?" L9 J$ C% [6 d# k1 N2 N7 D+ E
clrscr();# R8 W; X H7 L
printf("input number of person: n=");$ |; [% m; _' ~* `
scanf("%d",&n);* V$ s1 K( x0 Y# f
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只8 k2 X- e3 ~; B( A
scanf("%d",&q);
9 G) J* u8 p" S" \ p=num;
" Z) k7 H5 e' E0 a7 B4 Y) c' K4 ?& O1 V2 o for(i=0;i<n;i++)5 b3 n; ~# k2 b+ F3 P( O% Y% ~
*(p+i)=i+1;
! g; f! p$ m, D; s i=0;
. F2 D- f; b( P k=0;2 R4 ^) b5 }: b% l$ |( k6 R
m=0;0 t4 \% |7 w5 Y# X1 {# t' A7 U" O
while(m<n-1)
0 ~( \$ J# m/ w8 }: @* k {if(*(p+i)!=0) k++;2 \. f3 Z; L/ d1 B: }3 R
if(k==q)7 N4 V) E. T( v/ R1 e& E
{ *(p+i)=0;% ~& ^! J3 e3 n* T0 {% c2 ?5 a
k=0;
8 Y! W* x) Y- d( ] m++;3 K; x* r( T R/ g; c: w- Q/ x
}) {0 K% n. v( U# o+ u C
i++;) t+ f7 [, Z1 \7 {) f. u# \
if(i==n)i=0; i; C& E8 b s" k# c
}
( O" e7 B. @' i) t; W* N while(*p==0)p++;
' f1 {( W- A) m z printf("The last one is NO:%d\n",*p);
/ r% F! H B2 [5 B5 W6 @ getch();
0 O; Z( n. \ f$ W3 h: p& D% T' c9 j3 ]8 ]
} |
|