|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!1 D6 A7 X4 ~. x3 s, n+ L3 E7 }( b
这几天我在忙着编一个问题,我用了一种方法编出来!
" s& V- D- s/ ~) F' h$ Z/ {9 G但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
- ]4 U) R. I6 q4 c" y注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
: s) q9 H) T" v/ m6 E7 P( E/ \' h6 V; |, O! g
, Z {( z1 @2 q/ j) w) g7 u) T! n
题目- m! ~2 V( o& `5 C5 j" o
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。! W4 \5 U! T6 C
第一种方法:利用循环链表
6 q' t, H, I$ u' M: s/ d#include<stdio.h>* z* Y, h1 i0 G/ d y+ y
#include<malloc.h>
3 a; m! U' Z6 q3 N. O! a: i#define M 8 //共有8只猴子
& t4 b' y" N: V( A/ L#define N 3 //数到3只时退出第三只. k! P# w/ O+ o" ^# r ~! B
typedef struct monkey* v: F' `9 d+ m1 j8 W2 r
{int number;; T# U6 g* h/ `6 w: n2 O# L# F) ~
int flag;: t$ E! a( K0 ] U+ ]
struct monkey* next;4 \0 n6 W- w8 x" \1 ?
}MONKEY;
% C; f" T# V/ M z+ amain(), H* ^0 C1 e% D$ v- ]0 Z. h2 w
{ MONKEY *head=NULL,*p,*s;
/ [1 \" _$ @# b int i,sum=0,count=0; k+ @( s; u' P
clrscr(); //清屏0 L& f* [9 C/ o8 {' e$ \# s: A
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存4 L/ F f* Q+ G, X4 L% k
p->number=1;p->flag=1; }: O9 c/ w) c- t7 u
p->next=head;& P* A" j6 W6 w+ L
head=p;# i2 O. b4 {+ Z2 c4 \, C. K
for(i=2;i<=M;i++)9 s8 A: d3 Z+ X, ?& X2 c
{ s=(MONKEY *)malloc(sizeof(MONKEY));: U# F! F+ R4 H/ }* d4 R
s->number=i;s->flag=1;6 U4 x9 d8 p5 q# N" T
s->next=head;" ?1 o: s3 A( Z( H
p->next=s;p=p->next;
7 y3 ^3 z* B" Q. D }/ | Y, }* y" s2 A& T4 ~. ]+ Y1 h
p=head;
* j1 E2 s' h. D for(;;)& y( _1 |/ A/ l- ^$ V9 \+ R
{if(p->flag==1)
1 z4 l( ?- r7 Y* q1 ] count++;
7 I" P0 h4 \" }& {6 T+ } if(count==N)
/ K6 Q0 l+ q. X; n" O' @% H6 H {p->flag=0;2 O6 z E% _0 c) J4 \" H8 v. u
count=0;
5 D- {, ~' V7 U6 s/ U& J sum++;}3 z1 l9 d& j& K$ R; m' {
if(sum==M-1)1 q6 c _ Z* R* {0 ]' C7 i( W
break;
9 w) A$ ~3 R' S p=p->next;% k( y0 a* P# V; T
}
& H; A: x d- O, w! \9 u+ N! R p=% {( ^% \" `1 d7 b5 U3 G6 d; G
head;
$ l+ o* H& i2 J- C+ I for(i=1;i<=M;i++)
+ e' {5 Z, Y) G/ A- y" c { if(p->flag==1)
# N, F, x/ g7 ? r; b1 D1 _/ ` printf("\t%d",p->number);$ }" J. X1 ^3 r1 v! o
p=p->next;! N. m8 e5 l9 J
}
8 c w( J4 k# v( P0 \2 @- ~) q3 w
& p+ T- E. I5 E' `6 Y1 ?
0 H) O( q7 D2 |, q! Q
5 {7 K4 X# n& |1 I1 l4 \1 {# q( H}
4 G7 } t' { m第二种方法:数组
8 ^$ c; g i5 f) T! c; o#include<stdio.h>$ o7 z% k9 R1 l/ L8 t' e0 r
#define M 83 V8 H* l; f5 d5 Y8 c
struct monkey, N( `* q1 Q+ W* [3 O6 t& y
{int number;3 Q+ _* `8 a: B7 l" @
int nextp;) ? X+ [+ J1 {; X, ~: c* Z
}link[M+1];% {1 {' q) `2 \, w2 T
G' {) ]( F$ m4 b/ m+ V2 T
void main()
! I3 W1 p( T/ v' C: D# c6 z* f{int i,count,h; _' M0 p9 ~" p+ V2 u# j8 m
for(i=1;i<=M;i++): B7 G7 q5 W( m5 M% Z* f1 v
{ if(i==M)
: N7 u3 Z# s) K8 L, q" @ link[i].nextp=1;* V L* ]+ d4 E5 |! b
else8 f2 q& g/ i" B# [( ?+ o8 T) T; K9 w
link[i].nextp=i+1;" O7 [8 E e4 q/ D" p8 g
link[i].number=i;/ `- i7 G. h" h+ h, U: z
}5 z1 `( b1 X& w' q: m2 ]
printf("\n");
8 h$ P" `1 h6 O* Z* p/ k4 Bcount=0;
9 }1 S, c1 {5 ~h=M;
" D$ Z& ?; t9 t% L( O7 t3 W! _printf("依次退出的猴子: \n");0 V3 g8 d9 I& p" g+ g, z
while(count<M-1)
8 z+ N) j5 E# ^) e2 r3 X8 L7 `1 h% U% x{i=0;7 _/ X* I- a/ x* ^' h- a" h
while(i!=3)( g% k# x) q5 ?
{ h=link[h].nextp;
9 j6 _1 M7 }' i9 ` if(link[h].number), D- l2 f7 C% y9 ^ A
i++;}
' s& N1 J9 j2 W" n6 m* W
4 u9 C1 G; o0 ?$ @( N" b9 zprintf("%4d",link[h].number);! Y& i+ D( {5 i0 l1 q) A, y
link[h].number=0;
+ r; \) N8 l# D3 p; A8 ycount++;
F8 D: t0 c" @( O3 R) i}' H ~- l2 }0 D; f' \9 P
+ u m: k. |0 E, j, Tprintf("\n大王是:");3 q7 ]$ y+ S4 y- L
for(i=1;i<=M;i++)
: | ?, k: _" R; Q# V% L if(link[i].number)
! X% o! ~# ~' j, V7 _& K printf("%3d\n",link[i].number);9 h) [9 \+ `7 z* N9 G& P5 N
) H7 u# k8 b5 `+ \
k0 f- ~+ J$ ^( z}
2 X( a* C- {- m. z* G; `: A第三种是普通方法for循环2 e4 B: R7 o9 L* D
#include<stdio.h>
& Q7 |- E( P. b1 m3 ovoid main()
5 D# f; j; T: e; ?4 a# U$ w6 {{ int i,k,m,n,num[50],q,*p;0 \" J+ F! ^, Z8 H' X- }
clrscr();
6 q. G% u5 S: v" r printf("input number of person: n=");
. J+ b w0 n- p" ?0 }& Q scanf("%d",&n);
, O5 T2 ~6 z4 y) g* iprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
. w4 F: F6 e2 W9 Z scanf("%d",&q);( @# ^( ~2 Z* I; b
p=num;
' T& a# n# w8 p for(i=0;i<n;i++), I L: M/ @* I& n
*(p+i)=i+1;% ]8 u" @6 y5 D9 M7 K
i=0;
) Y s4 w3 Y N! h5 f( c7 n k=0;
5 i5 l- G% v( G# g m=0;2 A6 @7 t$ I/ M" w7 N. O5 E" R1 X
while(m<n-1)
8 `' j/ x% P% g8 C( ^ Z$ \ {if(*(p+i)!=0) k++;
" B9 O! Y0 j/ x$ C if(k==q)
: s0 K% K9 E, r4 A3 A7 _% c { *(p+i)=0;% _+ [8 l, s7 E6 R$ T
k=0;
! i+ c9 c- b, t8 i9 ]% S" G m++;4 n' W2 u. D$ t$ R! ]) y* R$ M% R: a
}. f9 Q, x5 e" b" {
i++;3 v6 a; e, K2 m9 e
if(i==n)i=0;
4 `( s# M) H0 ~% B }
1 c0 @1 r, ^* G! g2 j6 r while(*p==0)p++;
, ^: y9 z: {9 V. o y( G6 y printf("The last one is NO:%d\n",*p);5 C/ b* a7 [9 v1 n9 r7 s5 g; I4 A5 H& ~
getch();0 f; _% v6 V' k. x7 S1 r* Z
; j3 H S3 ?4 @
} |
|