|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
8 @# x% J* I. Q- _% \, d$ A" \这几天我在忙着编一个问题,我用了一种方法编出来!. y! p! z8 p$ ]- c) ?4 e2 ^( f0 I
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
' n; o i: F8 D0 q/ S, e注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
( S4 L6 n' Y* e; J: t8 @4 Y5 I3 o0 W% u! e3 d6 A* `% O
/ C I' F) X- ^1 Z# u$ v/ r 题目
$ M" O# h8 E$ I! R$ M山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。' f0 d W. ` [2 c5 d) h
第一种方法:利用循环链表, t/ Y% x" Z+ f; c
#include<stdio.h>, ]; i% d4 p$ j% G& o; q
#include<malloc.h>: p& i$ [" ?: f0 u
#define M 8 //共有8只猴子7 g. L7 N. p+ j# |' u
#define N 3 //数到3只时退出第三只" m- k; q, ^% Z
typedef struct monkey- }+ f( t1 y2 n7 t; e+ x3 L
{int number;# a3 R M% U9 t& t1 [/ y$ I
int flag;% o5 R* J6 ~4 V
struct monkey* next;
" } x' C& P3 k& V$ x: a}MONKEY;
% n) C% Y4 M5 kmain()& Y4 p, g! ~, e0 M
{ MONKEY *head=NULL,*p,*s;( J! [/ N5 ^7 k B' P+ a- d: Y( V
int i,sum=0,count=0;, R+ L5 X8 n2 ]2 l. o
clrscr(); //清屏
$ q- s. E1 I4 G6 k; ` k p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存, E6 E% v/ e3 r
p->number=1;p->flag=1;
* u1 M% Y- c! e' \, r( z p->next=head;, j& s. M7 Q( M9 J
head=p;
0 [' ~9 a6 Q5 W6 X9 E for(i=2;i<=M;i++)* u' U. e8 t! u/ a/ l$ }
{ s=(MONKEY *)malloc(sizeof(MONKEY));) t ~7 D# m" c# a, }: l
s->number=i;s->flag=1;7 C3 {" a* m" i
s->next=head;: W5 J) ~: h* d
p->next=s;p=p->next;
" m4 \. v- R" i }
: P$ X; \4 }$ N7 E& A p=head;
) g2 L. W) r/ h6 ^ for(;;)
4 ?$ X1 u8 _3 S) _ N6 x {if(p->flag==1)" i" `- W3 v. x: R g% S
count++;9 T& w7 A( J, {5 B) s- o
if(count==N)% m4 N2 q9 E6 k M9 B- c2 A: T" I& m
{p->flag=0;( D' H4 N! Y- i( ^8 C6 h% C6 ^
count=0;& Q7 Q( | A/ T# X3 m8 X$ R+ }7 l
sum++;}7 @* z- I! L# [3 L
if(sum==M-1)9 M( D5 n5 r4 o5 j$ P: Z3 g
break;
1 @% R5 w! l. Z5 A4 j% d p=p->next;
( }: R6 T% [0 F+ E# p3 @7 Z }
+ ^* r. f5 Z9 @5 c x p=
m. Y' Y$ @) d& m7 Y. t) }& \- R& E head;
; ~# v+ F) _) @) {# X6 X! E7 X4 O for(i=1;i<=M;i++)" A* F1 ^) O, u7 l7 r5 T
{ if(p->flag==1)5 M Z. T, N# E( t9 i6 o# p
printf("\t%d",p->number);
+ A( l2 r( G- c* d4 ] A% }. }; V p=p->next;
1 }3 G! R7 [+ w }0 T9 T l( T: [; |: g7 E
6 P# S6 H0 m' P$ F& ?8 G) F
* [# z( O @ |
- x. R6 g, g3 T4 }} * J$ U0 `; j0 G @! H' w& C
第二种方法:数组; [+ }, q% W# C! Z# s
#include<stdio.h>5 v0 ~1 w3 V- J/ w. l- F
#define M 8. R' h3 T/ N* M6 V6 H
struct monkey$ _! H5 K/ C/ M6 j
{int number;
3 f) L9 O- r' Z3 p8 P1 J7 pint nextp;7 a1 V" l/ `9 h8 d$ O" `, ` |4 n6 C
}link[M+1];
7 S1 T3 t# V" O( T* _2 t9 G7 w8 G
void main()
0 K; x" }; N3 ~: |{int i,count,h;
1 G* ^1 h! G* ifor(i=1;i<=M;i++)7 P0 `. z& W8 Z% b
{ if(i==M)( P9 ~/ J3 t3 o& X
link[i].nextp=1;1 J- G% A0 ~% z! B4 t
else# d( X' Z4 G2 j
link[i].nextp=i+1;8 P8 p; a4 H8 n- w/ m) [2 d2 K7 V
link[i].number=i;2 a# h, z6 b' K
}4 |# ~! o' S$ B* R: P
printf("\n");% L( u1 _" p3 \/ G& Q
count=0;
' N. X- }3 o6 W+ ~7 i4 L8 R7 Ah=M;
* g& b c0 p% _; p: g: i2 w. dprintf("依次退出的猴子: \n");
2 W8 _# D0 i& Z0 K8 F9 l; d, O0 T; nwhile(count<M-1)" B$ \( p! t5 ?; u2 g$ }, `" }
{i=0;
6 f5 H) |% W- G) Mwhile(i!=3)3 ?8 L! Q/ Z) D. \
{ h=link[h].nextp;
4 r% I7 U! `* C% j5 b7 c. \5 I/ ~ if(link[h].number)
1 X: _& }8 b# H" z1 v- M0 Q1 ? i++;}
7 h. |& I+ m7 K4 w/ p. o7 \5 { {1 d* h9 A( i6 i7 c
printf("%4d",link[h].number);
/ c$ y6 h$ Z$ Q Rlink[h].number=0;0 `& F* \0 i2 l$ h* D" K
count++;7 G3 F! S. u3 n; f2 W( i& u
}
2 z1 V F* U$ G# Q: q! ] S& `+ h/ ]
printf("\n大王是:");( T& `& n; z7 y) j! y6 Y, R
for(i=1;i<=M;i++)( d3 B* X% o8 ~
if(link[i].number)- p+ D; D$ W% x
printf("%3d\n",link[i].number);
_! ]# Q/ i" T0 W) p( w- Y6 l6 z1 T1 M* N" t
, b; q( L$ `. Q
}
% o- \* x- U( t$ J! m2 C第三种是普通方法for循环
3 z: \8 J9 d: e: o- m9 L#include<stdio.h>
' l/ v/ ^: L' X: [. z5 pvoid main()
3 p) M& q0 o( [# {+ G7 X{ int i,k,m,n,num[50],q,*p;
7 g/ T/ b* T! ? clrscr();0 S! O% I9 c% O+ g; m- K8 x7 a
printf("input number of person: n=");
5 X# _) G' B) b1 V0 A scanf("%d",&n);" L$ l" I# K+ t0 B* x2 z9 z, y+ ^
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
w' T) l. o. b4 @& F' ~ scanf("%d",&q);
& q8 H( Y) a6 {7 D3 v p=num;
. f* e0 E& g5 c2 E7 k1 p. J for(i=0;i<n;i++)
* }3 r$ E/ H) D, q2 Z *(p+i)=i+1; T) n* l, Z4 c* y* a& o; Q
i=0;
" `/ a2 f1 r* P2 _1 B- g( l6 X3 ]7 q7 Y k=0;
8 J& v8 s: t! d8 U" ?9 w8 ~ m=0;
s5 r; C. |7 r2 S, ?3 i) `) e4 G while(m<n-1)
& ]8 H/ p2 Z, G* | {if(*(p+i)!=0) k++;
' `+ [$ s' _( z7 X& R8 W if(k==q)
- U5 G+ \; D3 K9 E' { { *(p+i)=0;
0 G% R- c c' q) E( F k=0;0 g9 k |- n0 [8 j V a
m++;; b6 s: x/ D: Y) x0 O4 T
}+ S4 ]3 t! _# |
i++;3 n0 T4 j6 J/ _8 y! q; D, C
if(i==n)i=0;
# n7 X/ o$ {) e }$ x7 R2 n4 s, o/ l
while(*p==0)p++;! t; H7 u D# ]9 v* X
printf("The last one is NO:%d\n",*p);/ n. k4 `8 J- e! b, A5 Y6 n' E# l
getch();
8 J( F7 o2 ^& c7 H4 z8 U7 s
4 G7 h3 P$ |- m& [2 J} |
|