|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!6 Q& M& W5 c$ C* t' \
这几天我在忙着编一个问题,我用了一种方法编出来!
- t0 L Z" F8 O' v. p% t但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!3 u% K- K2 R7 H0 ~; E+ e4 D
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 * O6 l P; y" ]0 Z9 v! S5 N
/ Z& q+ p$ z/ T. w/ P9 M
5 p; A- G0 {2 _ 题目' h2 \, |& I& z# D; S
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
2 U! k d, C/ A+ L3 w3 }第一种方法:利用循环链表
* S, H! ?4 C. k7 ^2 U5 P: ]% s#include<stdio.h>
3 G( g _# u" I0 }9 X#include<malloc.h>* B q3 h/ `% S& Q1 p$ U
#define M 8 //共有8只猴子* |! n+ d- w6 z2 H( q
#define N 3 //数到3只时退出第三只7 S) h3 X2 c+ Y0 ?
typedef struct monkey
0 C1 L- f# m2 S$ |$ U{int number;
6 ]$ ~5 m1 o& ^; k" rint flag;. ?' ~0 w! W y- l8 `
struct monkey* next;
3 R, E$ P, G" e7 S}MONKEY;: k; x% Z5 t# G& v' T
main() \, T. }' q; Z5 Q5 }
{ MONKEY *head=NULL,*p,*s;6 J% P$ M+ ]$ n9 [; h: ^
int i,sum=0,count=0;# [3 c6 L1 b3 h& W6 ?- {4 T: @' i
clrscr(); //清屏
9 @0 P5 ] D3 R2 S! Y B: C( V p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存- h( G( U$ E+ K
p->number=1;p->flag=1;! L2 r: N3 w4 e$ O9 o1 U- X
p->next=head;
" e+ i- P: q% q1 I0 m8 C head=p;/ W- {! D) S" m8 p
for(i=2;i<=M;i++)
# _2 c! x. D S8 ]) [$ D0 U { s=(MONKEY *)malloc(sizeof(MONKEY));
; E4 U# {$ g7 B3 m) M$ K4 u9 D s->number=i;s->flag=1;8 p0 L o! }& P0 [
s->next=head;% h) T! z0 @! [2 \
p->next=s;p=p->next;2 ~! w* O% h9 j2 e! U6 E& e! \6 G
}8 P2 u! p# |7 h! y5 `
p=head;) P' ~7 y! y: [6 Z+ F+ h
for(;;)' n q8 \2 `) L( b5 Q; W
{if(p->flag==1)* @* \% s- ? c7 u
count++;
# g% S7 x2 X, N( d; s7 M if(count==N)8 U" I) T1 v, Z' }" h) M/ k% }
{p->flag=0;; _" L* F5 k S, |: y! N
count=0;
6 B0 H) o. ~& j! G- `. Q2 E1 ` sum++;}; N" k7 _; \ N6 ?; H
if(sum==M-1)
+ G- U1 b4 o! f9 N" b9 a break;
6 W. x% @, H8 x3 {+ J0 i p=p->next;; [& C$ G* E1 H5 a/ Q& ~6 W; }5 \# d
}3 u( y' T0 d/ X" @8 Q
p=' T, C6 y1 x* v5 r: b' w
head;
! \1 E; e$ Q& y% R/ x5 P for(i=1;i<=M;i++)
; x3 H# i( ?- a" l5 O" q; { { if(p->flag==1)
( b$ n7 V8 Z% u, g" I6 c7 A( q3 R printf("\t%d",p->number);
) C" N$ x1 T2 Q$ X& ~' p' s" E4 a p=p->next;
; G$ ~% H& V# e) F$ o }
$ w2 {* v& N* Q! f
, D$ ^8 v7 r' L- L# C, }2 E# f
4 ^& U0 V; \0 l; ^* n
: H7 X: `, l6 e7 x}
: T- Q- X! R/ ~8 D; P第二种方法:数组
/ y% T* }" Y4 c* v% z: ?. X& P#include<stdio.h>3 n5 u; b1 l P' U% T, L5 M7 \
#define M 8/ _7 j& j5 ]* { f. z& m
struct monkey/ E# y* W* C O, L& h
{int number;
6 f. `. E7 F+ O( a* ~% J$ H3 U) Hint nextp;
/ ~" ^# d% U% n; {/ O% h4 @* O}link[M+1];7 r \9 i- q4 Z6 e) [
i B C, n5 ~5 Z" h% i
void main()
* j5 u6 c, j0 D{int i,count,h;
9 _+ t% N2 ]" y4 q& O5 Z# V+ N$ u* zfor(i=1;i<=M;i++)
( |) Z/ z# Y9 F* P{ if(i==M)9 W. G3 _6 o+ G7 ~9 h* a
link[i].nextp=1;! Y4 G4 X9 {$ h: ]# u; ^! d
else
) J7 E1 q2 u: [4 C9 H7 R( m link[i].nextp=i+1;
8 Y5 K' r8 z7 w `, ~ link[i].number=i;
3 I- I0 f7 I H L2 w5 D: f8 y4 j( A}! w" O( t) }4 s2 W! e
printf("\n");4 |1 O; c [# M! P( z
count=0;
" Y, ]$ d, f5 h1 o0 qh=M;9 A) Y g. G5 j' M. H) J$ `) ~
printf("依次退出的猴子: \n");
0 Z0 W2 i4 G( {" n6 L" a3 Kwhile(count<M-1)
6 ^ c# V1 z& F7 M/ d{i=0;
# X7 W9 l( U# \9 S. E8 J$ owhile(i!=3): S0 S/ v4 B4 Z; d# X k& z
{ h=link[h].nextp;! `4 T% N% ]6 T; b
if(link[h].number)
% i8 N- X! m/ I- b! n& w+ a i++;}
* m2 m* x _; Z* E f: d" {3 W/ \+ r. E! g/ }! ?
printf("%4d",link[h].number);3 ?4 N( i+ A* ?' z+ v4 ~1 D5 n
link[h].number=0;
1 m. Y/ z. K3 e. N) ^8 c0 s* |' mcount++;; K) V3 a& o3 M! z, B
}
8 E& r1 U8 K* r9 w" i
; p# A: v7 ~4 H$ D' l/ J4 dprintf("\n大王是:");
/ ?& F( V) U" g! h" f: M for(i=1;i<=M;i++)+ r0 m* P) W+ e/ K3 h. A0 E8 [
if(link[i].number)
7 J1 g/ S+ Y! t: @ printf("%3d\n",link[i].number);- N% K0 x+ e3 @2 X B z! L8 V9 \
; p) X) s7 r. r; T- F, I8 S
) k8 o- W8 \# K/ ?. `) l) _} % K' A3 p. q: k5 t( X2 q6 ?
第三种是普通方法for循环
) ^6 }1 _4 f; O4 L- k#include<stdio.h>
: T0 O7 T; V& C8 h4 ~; _void main() I% _) D. m& z: ], K
{ int i,k,m,n,num[50],q,*p;. I" p' M. B, X% l/ Q. Q. g5 a+ n
clrscr();$ t" {% a8 q5 B D: \7 ^
printf("input number of person: n=");
Q5 t* z4 \- X0 K scanf("%d",&n);2 Z' }" {5 @3 U( Y/ m% W7 X" s% A8 ]
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只2 P4 N4 I1 j6 e9 G
scanf("%d",&q);/ Q4 a, T5 v( }4 x
p=num;
% N, P4 M( t/ v for(i=0;i<n;i++)
) ~6 M; ?8 R. A *(p+i)=i+1;$ l) |" r/ E" g9 n7 }7 E7 h
i=0;
3 |# I, L% C+ f0 h5 e k=0;
! C; F d9 I: B# X+ N( A H- I6 q m=0;
+ r) g# H6 M& p& l while(m<n-1)3 ~) k2 e) B7 x. ~+ |
{if(*(p+i)!=0) k++;
0 H7 _ r! V* O3 u9 S; R, X( P3 h if(k==q)
2 U3 O- s+ x' r; j0 L# [7 j { *(p+i)=0;1 w& e, `) i7 Q
k=0;
3 |( K& i" o: ?9 _, i# a& I8 ~ m++;
/ a7 s$ P; i" m4 g* k( Q }! Y! j! j3 c5 n, k9 X3 G6 x
i++;
6 ?3 ^0 ^" F/ E% Z$ Q/ ^5 u! m# T if(i==n)i=0;+ [ J6 p+ x+ @6 l6 Z
}
" V9 [3 ^! `9 B4 A while(*p==0)p++;
$ a( q( f! v, t, q printf("The last one is NO:%d\n",*p);) D4 M/ |2 K& u
getch();0 K) x/ @0 M: t( ]; _/ N
1 a4 @0 d* K; ~) q) V) i+ ^} |
|