|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
# ?1 N# X( S/ G) N9 D这几天我在忙着编一个问题,我用了一种方法编出来!- K2 n8 J' p2 ~
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
$ |% j, }7 [+ l7 _- V; Y注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 : B0 v; A8 J @% P
5 |) e! h, T5 P3 y3 l
+ c! Q0 Y9 @- ]5 j/ e 题目
% Z1 k X: ^5 v山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
% J& b4 i& o2 G& c, ~# \第一种方法:利用循环链表
% u, v0 S* B$ C) e0 E* V#include<stdio.h>* C9 L$ |( d7 l
#include<malloc.h>
& A5 e) [) G, B#define M 8 //共有8只猴子5 v; i" I( {/ H9 ?$ D
#define N 3 //数到3只时退出第三只3 c3 J5 k L6 m! V
typedef struct monkey
/ O% r* F: Q3 k* d6 g3 ]{int number;1 ~/ {. ?2 L- K) r% j2 t
int flag;) D# ]& L9 z/ G2 y" X3 w
struct monkey* next;
# h4 N1 W! u$ ?; }: z6 Q* _; C0 e$ J o/ M}MONKEY;
4 R! Y7 x' H+ b0 u* @main()
' o# L G% h) F+ D! F) ?- Q{ MONKEY *head=NULL,*p,*s;3 {/ H7 C( V) c- X+ d7 r) d$ F9 w
int i,sum=0,count=0;
% g4 Y0 U5 b/ U# j clrscr(); //清屏
* _% Q* G; g4 p c p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
/ |6 I" n$ F a: P2 _ p->number=1;p->flag=1;+ u, S/ w9 Z' `2 P
p->next=head;3 E& D0 |& F/ `0 @
head=p;
! ]' V3 w4 s# g6 z+ H/ f for(i=2;i<=M;i++)8 b- ]& X/ K- f5 A1 x
{ s=(MONKEY *)malloc(sizeof(MONKEY));
: N3 K& M3 g* C$ t s->number=i;s->flag=1;! e0 q2 a/ A3 V1 o3 B! V! u4 k0 W
s->next=head;
6 }, ~: I1 \" v5 J/ Z' q p->next=s;p=p->next;
) i3 n. h; Q5 n }
/ }: t* ~" o6 l! G) v p=head;* g8 ?* ]4 R p) ]
for(;;): o. r) Z! F5 h8 v$ b; |% T
{if(p->flag==1)! i1 C' U' \3 t7 X# J# D$ _
count++;9 f6 ~0 @1 T! |# F
if(count==N) L" ~5 t' l+ I& h3 x8 Y
{p->flag=0;& g: f3 d$ X; N
count=0;
9 d1 f. G5 v! C1 C sum++;}" {6 M( n3 k3 y. a
if(sum==M-1)% s; I6 G0 L. D- K9 y, U
break;
% z( z' h/ M+ [ p=p->next;
' ~1 l: S& `' ?; [! k. Z }
* G. V2 e4 N' r) p p=" q+ f7 T9 ~# D+ S
head;
# L [5 P3 d a for(i=1;i<=M;i++)
2 E% D5 a& u" M5 g) t2 Y { if(p->flag==1)/ X3 E2 z y9 x3 c0 ]: S0 r7 U: d5 E
printf("\t%d",p->number);
. H0 r9 V( F! { p=p->next;
7 T9 q3 Y3 i$ x }
' P! q }# I2 i: E' f
/ N( L Z: x: @$ X' J. ] b& k
p" i% r3 P- e0 d% Q( ]7 q# d$ c; J5 I" ~
} + A' B9 i; c2 `; z2 o- O5 D
第二种方法:数组+ L' s% R3 N2 @7 l# y
#include<stdio.h>
: w6 k! h/ `& \#define M 83 l# ?0 W, x4 c: u0 v/ _
struct monkey
% h3 B, ], e8 t{int number;$ S) {8 t4 n/ \( I" l
int nextp;
. Y6 R) v [7 W# l& }% X6 D; p}link[M+1];
% t9 o8 ^) J! G( S: B7 h0 e- a) r" {/ u1 r- ]" F, x7 Q
void main()- r: M, G3 R$ n1 x6 P% l" t+ A" N
{int i,count,h;
8 r2 @( s; G- \8 u- i3 ]for(i=1;i<=M;i++)6 B8 |& b" A" U9 k" z6 \( o. F
{ if(i==M)3 G) j% d) F! i
link[i].nextp=1;
# ~3 D/ N( [' `. X: Y else
" Y& A, Q. h* W link[i].nextp=i+1;
8 t* l. A/ ~& z/ W1 W3 D* s link[i].number=i;
* r6 n4 I. V3 B# U. k: K1 F* i6 b}
* C: ]6 i6 `- O) Qprintf("\n");- W$ L0 a) C, ~1 S
count=0;# j4 w( p* I. {
h=M;
6 K% q6 C# q& x( |% }printf("依次退出的猴子: \n");5 d, `# o# m) {. m# V
while(count<M-1)
, b Z9 f; T! j{i=0;4 P0 }2 h% f# L0 y2 m
while(i!=3)
% c6 f- l9 R8 W; z5 `/ ?% P{ h=link[h].nextp;
/ Q3 ~- h3 o G if(link[h].number)
* ]# G! W( O5 ~* _# B% Z i++;}* j+ B% E3 ]$ }* d! ~$ x, z
8 t% G* K& |9 w: n% l
printf("%4d",link[h].number);& q& |; @0 t( l+ @% ?: g
link[h].number=0;
# |7 b% a6 o6 k1 F& x2 }8 k9 X3 xcount++;- |+ J) E7 b+ S/ Y! Z
}/ M4 H" g9 s% }6 w; m
+ m- O' X5 O! \& O
printf("\n大王是:"); G& [2 \- i) C9 J/ g
for(i=1;i<=M;i++)& r0 m8 S+ \1 T% I8 R
if(link[i].number)
, G1 |9 F0 L% F6 `) p printf("%3d\n",link[i].number);
# I6 \6 ]' e) n2 m6 k; z
5 `5 p" @: Z# I }) V/ V% E
6 k9 h, W* g+ E: G4 i; O} 5 D6 N+ T( n# w: ?0 K: H
第三种是普通方法for循环- B: P1 x$ m# J8 t8 V* w
#include<stdio.h>% `1 {8 W0 ^, ^( L1 g5 C. d
void main()- _, r* N' A5 s9 T- c8 y
{ int i,k,m,n,num[50],q,*p;
4 T/ @1 g* |& R- B0 ^ E# r' q% j clrscr();
- @1 K7 ?% G% G( S; R) T printf("input number of person: n=");
, Q3 c, y* ~7 G scanf("%d",&n);( Q& ?) Y5 g% T# m9 i1 ~& t
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只! S. F7 X: R" U+ P. C" |: Y. \0 Z
scanf("%d",&q);& q8 s! Y& p( J1 l' [
p=num;
/ N1 ~, @3 ~7 H7 I& V for(i=0;i<n;i++)7 @ r% b% o& B* N
*(p+i)=i+1;
* \; r6 y/ Y# Z i=0;
" N' ~7 K4 I6 D, a% J( }7 n! V0 [ k=0;8 S m6 h8 p- s, K0 H* U' I* ]8 D) |5 ?
m=0;
+ w9 R8 B8 z: P: I while(m<n-1)+ m9 D+ W: [ R1 f
{if(*(p+i)!=0) k++;
- I5 v4 U; q% a5 I/ w if(k==q)
- m# q7 t1 N) e# Y$ l ?; { { *(p+i)=0;. c/ P- t0 P5 E* D9 L
k=0;
, s7 N- n \7 `* ^ ?$ G7 I1 w m++;
2 y- U) g" y) b" l3 f- p9 S. _1 M }/ m0 O% G, e$ U. ?
i++;8 J/ L" L" W" ]5 h6 W* U
if(i==n)i=0;
, ?9 M9 M* t3 I) m }
( w' r x/ @5 q _ while(*p==0)p++;( k# {4 `- u+ F( N
printf("The last one is NO:%d\n",*p);
! ?9 n7 X% Q |% P B( e& v5 O getch();
' j/ |- g* V3 H$ }6 U$ A. } S* m. W# Y. H. j2 P @) _
} |
|