|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
2 i7 g: C0 O9 v. [这几天我在忙着编一个问题,我用了一种方法编出来!
, b& B1 k0 R; M' z ^' L但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
8 [7 ^: j4 b- \: A( v注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 : i/ _+ { l9 ~/ R: p
" D: G0 a8 s& F( W; R* C% ` d3 G- z# }3 G& r
题目
) r8 k2 H* |- O6 m6 ]7 u$ [0 _" r山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
0 X. r4 a0 N& \( l1 f: C1 ?第一种方法:利用循环链表
& `* t* i: P( }/ u) h#include<stdio.h>% `+ j% p6 d" @1 F# B
#include<malloc.h># V9 Z8 o4 u' u! D
#define M 8 //共有8只猴子& ]+ @. N8 \2 y
#define N 3 //数到3只时退出第三只
# e# v1 S& G# @' A: G# ]9 L9 }4 Ltypedef struct monkey
8 B: R& y7 e8 q5 o* c/ K{int number;
( r' {; W5 U9 M# b2 T) zint flag;
3 E A3 E( q5 T4 \struct monkey* next;. X3 Q! c; O2 V& s
}MONKEY;
* W1 x. ~" V4 ymain()
. B5 C6 I( P# b- h{ MONKEY *head=NULL,*p,*s;
7 i* \/ `4 s5 _1 t6 Z j* l int i,sum=0,count=0;
" X, o5 |8 ]& P: z! ?2 f clrscr(); //清屏
5 }1 `7 I+ Y1 D* `* c p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
$ _1 m8 b8 v5 t3 V# O p->number=1;p->flag=1;7 m( }8 R7 g5 K1 `6 P4 X$ S
p->next=head;
* [5 Z) `; K* Y9 v% S! J* r head=p;
- s2 S% z* N, q B9 k+ a2 x6 z for(i=2;i<=M;i++)5 Y3 D+ \" u4 \
{ s=(MONKEY *)malloc(sizeof(MONKEY));
% c# i" w% ]7 n2 O2 ^$ q+ d s->number=i;s->flag=1;
, j0 @# V* E, k, I7 I s->next=head;! d+ \1 ], S% M- o% f
p->next=s;p=p->next;/ u t% r R- q8 l* x
}! {2 e8 z0 `9 D, G7 i4 J" t; g$ f
p=head;
* v8 X) I* ^: y/ U) V! | for(;;), |8 L: J# \- K2 ~# D, A0 ?; I+ R9 t
{if(p->flag==1)
5 E" V, j0 R0 [4 w3 [ count++;$ Y v1 Q: D6 i0 W3 f q# k
if(count==N)$ k3 L/ Q' ?7 q
{p->flag=0;! @4 F$ i8 t7 E
count=0;$ V; }5 n4 ^9 p. t+ [% [% L
sum++;}
5 x6 t% R( s" U& E9 w7 ? if(sum==M-1)
& R3 D* c. C2 k break;
& Y; e9 y& K% p8 ~ p=p->next;
0 M% m1 ]3 i" m5 ^3 D8 K }) t7 K$ c$ Y+ v; k
p=
6 t, k- _3 a4 ^: a0 M: s) p head;0 y, V8 w2 z2 H0 }
for(i=1;i<=M;i++)' S3 `& C9 ]; M8 y8 L$ Z' y, h
{ if(p->flag==1)
1 K1 b8 [9 s! v) V4 }/ C# n# y6 K printf("\t%d",p->number);# M' O n4 ]( E1 ]) j5 R
p=p->next;* q$ `5 X, w/ \
}
1 i+ `' g5 R" e# \& C- J9 j
' T5 a& Y& v2 `% Z1 ~: |. i
$ d: f( [$ {' v' n4 ]
8 o0 v) N) Y! c3 u! |7 z} ! t0 F$ r+ v- F( a1 C# w
第二种方法:数组
% V+ G2 _: T5 a9 L# Q; ^5 J#include<stdio.h>. H3 D. K, K8 [1 X4 {) m) R3 ?
#define M 83 I% O! n+ l4 R5 s0 r/ Z
struct monkey
" S' P3 x3 w2 H$ v/ Z4 e6 J, o{int number;. k4 ]6 ]9 c X! a/ W. r0 a
int nextp;
& S" v" ` o/ G/ j0 J$ j}link[M+1];
+ M9 J7 ~: U ~, Z) k) P9 v' C1 U5 W
void main()
. U: ?2 g7 O& V5 ]{int i,count,h;
- d6 e; T: J/ q6 ~$ B! F& Tfor(i=1;i<=M;i++) _8 F7 ?. _" j
{ if(i==M)
. \ e% v9 X8 x( m* Q: i6 [" t- J, { link[i].nextp=1;
- |& w5 a. \! s/ C8 T else
9 }- [( g* `0 Z/ T. R0 v link[i].nextp=i+1;
9 H4 V7 p) i1 F. X9 P link[i].number=i;2 A3 Y" |: H; Y/ l0 Q9 c
}, u. B8 v' ^6 W* G q
printf("\n");
- j/ B9 Y% H# y0 k Vcount=0;" k& d |% Y3 f5 [+ j3 A1 l0 ~" f
h=M;
( x6 _+ Q2 E# oprintf("依次退出的猴子: \n");. Q8 ?; L7 q6 V+ Z
while(count<M-1)
( B' | \4 b! C9 W# ]{i=0;
( ]* d+ `+ m, u$ ewhile(i!=3)
" C- l1 ^' q2 G' ]{ h=link[h].nextp;% k" J- R7 f( Z. [3 f
if(link[h].number)
( t0 S# j- z$ }- |7 l1 ~0 B i++;}
7 d7 s1 `% i) x: m/ C: } e5 n/ r" l$ @5 B9 P# ^
printf("%4d",link[h].number);
: v% k5 n4 Z- u& {$ t/ ~, p7 _0 x3 Klink[h].number=0;+ p d* V, U. P3 R# A2 r
count++;
& M; y* j. r- e# ?) _}2 @% q( m/ G3 `1 C7 ~
6 F! z1 o% H# H1 C
printf("\n大王是:");
% j2 _- y" B) z; T! [- j% d9 r for(i=1;i<=M;i++)+ k, A3 | s( s* j% S$ _0 P$ k
if(link[i].number)
! f5 h3 R; j8 F4 s( k( D printf("%3d\n",link[i].number);
6 {1 I% P0 I0 d
6 w: E: V6 l1 B7 z0 G, p
! _- l/ S6 o, U& v0 s4 J}
]/ G! }. h3 @! A6 U5 s第三种是普通方法for循环! T$ l/ S3 A( L; l8 [
#include<stdio.h>
7 G5 U. d L) b+ w+ Y& R. c7 R/ Zvoid main()
$ D' W# X n2 Z2 ^/ W$ u{ int i,k,m,n,num[50],q,*p;0 |6 l6 ]: `# j9 v: P5 Z
clrscr();
+ b C0 {, }5 ^1 ~. j. h printf("input number of person: n=");
, s: |/ H' ^; J" d. K- G% m scanf("%d",&n);
0 y; ], B& V! T! U' Iprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只2 J* |! q" G" N7 y
scanf("%d",&q);
; S3 M4 G0 h u/ H* B9 @ p=num;
1 O* V2 R) a" i$ o5 M8 k# H2 K) X for(i=0;i<n;i++)
1 P. o1 u7 p& y: @ *(p+i)=i+1;, L8 i+ t+ o# g0 N2 v
i=0;
5 F' p# O b {& W" Z E k=0;
7 a' x$ x' R9 L. J7 Z m=0;$ M3 w K9 g$ m/ x" h, l2 b
while(m<n-1)$ p& `/ ~& H( g+ j j5 h. Z
{if(*(p+i)!=0) k++; y5 y& i& s1 r. \7 ]& }" k$ l
if(k==q)
6 U% m. @+ d: f; G- _ T o5 \ { *(p+i)=0;
1 k; k' ]. d4 W- j. g; A k=0;( ]& {" Q. l- b/ `- t
m++;
+ T( g: C2 K; f" `6 J4 M2 c }
9 K: ?6 k/ e+ _. T" j i++;
' z' [0 z; C5 n if(i==n)i=0;8 j1 X$ s7 z. W' y
}/ m: Y1 m$ A4 [' P: C
while(*p==0)p++;
( v0 Y# \) P9 h6 [5 _, k# _ printf("The last one is NO:%d\n",*p);" b5 _ `! _2 Q$ X5 _
getch();5 s" H# ^' q, x0 n
$ K+ G# W7 s( F} |
|