|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
1 w: d; n z! e5 V5 M l* V+ m这几天我在忙着编一个问题,我用了一种方法编出来!
% i$ Z% R/ _. H4 ^3 D但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
6 f1 y$ C, S9 w; p注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
% d+ B0 x. Q& u
& G4 r8 G# S: r3 g4 I% J) U* N! v+ {- \6 o* X; A6 }
题目1 S( k/ X* O7 g; w2 C
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。( M5 @; }9 l6 E! o6 t- \
第一种方法:利用循环链表
3 X2 E! ]* d: b& f' C: L8 v- V#include<stdio.h>. P9 `/ K( h5 X6 h1 D5 o: `2 o# E
#include<malloc.h>0 I# h0 L1 q3 {" n
#define M 8 //共有8只猴子
+ C4 v# A$ n j#define N 3 //数到3只时退出第三只
1 @; H( a* b- Z, ?& dtypedef struct monkey
+ p" w: \" Q3 r3 n, n{int number;) v8 \: { t5 L( e3 B
int flag;0 W. J: @4 \) g
struct monkey* next;+ g) A* O% z2 F [& K& U6 e# ?6 F
}MONKEY;
$ P$ L5 Z! ]! s- y% j, o% _: w" Q0 kmain()
4 x: [& X0 P& `2 M9 _; q{ MONKEY *head=NULL,*p,*s;1 h6 V" o$ J2 F8 p. c( {9 ^. S
int i,sum=0,count=0;0 Y9 {/ s5 z: \2 ]5 m0 u! d4 x) L
clrscr(); //清屏
3 j& C d4 S! U' ?' Q# N9 J p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存* Z/ ]* ~+ P$ S2 W0 |$ t$ _& O
p->number=1;p->flag=1;: [ ]- F! Q8 o( _$ x2 @$ s
p->next=head;$ D$ k5 Z6 |: |7 v8 B8 k; s) W
head=p;
& p* z8 g3 m. h; j$ T for(i=2;i<=M;i++)
& L1 p5 l7 o& S) K5 D { s=(MONKEY *)malloc(sizeof(MONKEY));- E1 e1 n' b( V! Y" x
s->number=i;s->flag=1;+ H# P! {* U6 J5 d& z: j
s->next=head;$ H& J7 U* X' C; @5 ?4 G: \
p->next=s;p=p->next;; T: _6 i h- T9 J, n2 J" C
}
# b: A$ ^$ K1 m" ~* w p=head;
q D1 @3 j: N' e0 o$ D for(;;) _+ ^/ ]( K! U" j+ p4 W
{if(p->flag==1)
9 |* o' } N( q) z count++;+ T9 `( L( a6 i* p5 Z( m3 q
if(count==N)4 p# a9 i% T4 b; F4 Z
{p->flag=0;
* f, q" A( E; y Z2 s2 U6 P' k: } count=0;
) d" }' Y" t0 S sum++;}( s( d1 }/ b1 ]# Z: E* l @
if(sum==M-1)" h+ a q. n5 H6 x# e* E
break;
2 E- ~ x: t6 P7 v p=p->next;/ g) a2 f/ F$ N$ s2 I; s$ g
}/ L8 Y8 n& V0 \/ p$ I- ~" @
p=: i' @3 ?5 K3 N, D
head;
! b1 O7 D ?. I: h" }7 W4 ] for(i=1;i<=M;i++)
/ j0 m# t# U5 N" N |* U { if(p->flag==1)
1 g! D7 Y- K! W2 D) Y9 u8 l) S printf("\t%d",p->number);# {# F z: a- X, y2 M
p=p->next;# u$ ?1 }; Y' @# @, ^
}
; a6 H/ r) x3 @+ ?3 Z" ~: t% X
& \9 U. U8 O) V
2 H5 z( e) |2 ?6 G, u; e% ^- }, [, L/ \! b7 I- w: D
}
$ b" O) K: e/ E9 e3 I2 T+ a第二种方法:数组
- D3 ~% A5 B$ x/ Z. {' l#include<stdio.h>
/ x# W( C% j' i/ w- _& B( `" f5 q#define M 85 A( A7 K4 @( q3 z# c
struct monkey
8 w1 {6 F: j+ B2 J0 q{int number;
8 o5 B& h, A& Y/ g) wint nextp;0 a1 ?! N- Q( y' d, d, k- `
}link[M+1];
/ o# d+ R$ U& N6 c# _. A% a& `+ N
void main()
0 d5 Q$ } ?+ | b+ f+ G{int i,count,h;: Q$ ?5 @- X8 G |4 y- |
for(i=1;i<=M;i++)- P: b" l) V9 @7 j k: ?, ]! j
{ if(i==M)$ r3 Z7 k/ A- S9 R' s$ Y
link[i].nextp=1;; z: q/ K' n- l: V* j# R! w( c3 A& d
else& o, o/ ~6 ~. R' I. |
link[i].nextp=i+1;
, o2 |( S8 R) R$ O link[i].number=i;: P* s+ _# D4 a+ G! J
}
. N/ C& T8 N+ M$ A) L" x! wprintf("\n");% y+ e; A$ e" ^" t2 T$ N0 t3 u- M: a
count=0;" x" j* m. D+ |# b/ \& m
h=M;
$ t; @1 Z6 n% o+ d3 [- R) m9 @printf("依次退出的猴子: \n");
8 `: C J X8 jwhile(count<M-1)
+ W2 s ^* c* f. _( ~{i=0;
* t) ?) l! L6 E) N& _) ?while(i!=3)
( v) n9 P$ f* y* G. T{ h=link[h].nextp;
% g5 H9 {' Z9 \% L" h; D& K if(link[h].number)$ b8 H% c, D( e4 _$ V) }; I
i++;}2 I* _# w2 N: @* S9 ]6 p7 y
, E9 ^3 f! v1 }/ O* a! Y* ^' x
printf("%4d",link[h].number);! K3 k: \1 ?0 e9 _: c( ^
link[h].number=0;
0 _) n9 }; J) K% F3 rcount++;, W, B3 K1 d' R2 R$ o5 f+ { [* J
}
* V7 c' p/ D; M1 J* W! x5 M' A2 _- t8 q* g/ X7 a# k- I. q
printf("\n大王是:");9 g# Z( [2 c2 E2 V5 O
for(i=1;i<=M;i++)3 L4 d' E# _7 C4 ]9 Q
if(link[i].number)
. A" a: N4 r+ ?% T3 e/ z1 M printf("%3d\n",link[i].number);, s4 y4 D# B' q, w
4 g9 ]& r" {: {1 y7 ]2 O
/ E3 w& g3 D) i}
' N. D% I2 Z i% N# @' q7 _第三种是普通方法for循环 \* g$ J y: W# ^( N5 F7 x, w# k8 [
#include<stdio.h># \8 j4 j( l* @) U
void main()
' Q) B( [; T+ K{ int i,k,m,n,num[50],q,*p;9 O' {. {0 `2 |) T: P
clrscr();
2 A8 d b8 l w) z+ @; l$ T printf("input number of person: n=");
r1 c0 v) D) L C; C: a3 { scanf("%d",&n);
4 \* X7 `- {7 t% c' Yprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
, U6 p: J' c/ k& K+ ^" E$ \ scanf("%d",&q);( R1 F) h8 T5 I
p=num;5 J1 G# t. X3 h" l6 V
for(i=0;i<n;i++)/ l; A* r- s0 w7 M1 Y% K5 N- |9 V
*(p+i)=i+1;
4 v1 Y) P- b8 e l" j2 ~ i=0;
2 d" C; P9 M1 r/ V3 A; f8 x k=0;8 y7 n. d! k7 K
m=0;
' x5 Z9 ]9 Y9 o% _ while(m<n-1)
) U( {, B! g- K* K3 E& g1 S {if(*(p+i)!=0) k++;
0 a5 r1 u5 d9 h5 Q" i! c if(k==q)# }3 ~& Q+ I8 z
{ *(p+i)=0;& F. u7 Z5 _1 p" h+ a! w H
k=0;
% l. l: }5 {8 C6 x m++;* O1 q0 V1 _% }4 W
}
+ C x, N! @! ], ~1 l i++;
+ F" r0 ?, ^) C. ^ if(i==n)i=0;9 t" @& f" }. ~, |' W8 \
}7 [8 ~" G+ m' W0 o
while(*p==0)p++;$ w9 q& b0 u$ ?+ H, i
printf("The last one is NO:%d\n",*p);1 b$ f& ?5 h. f9 y% B7 E+ C8 ~
getch();2 P, x, ]" a! V9 y) W0 t4 G ^2 I( c
/ T: M: `( B- p, ^! J/ ~$ m% G} |
|