|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!: p2 R G& [# |% q( ^, E9 F) c
这几天我在忙着编一个问题,我用了一种方法编出来!! T4 a B B) y+ y/ v* p# R F& o
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!" h; R# e) E5 a. r1 ~, _5 l1 \5 J; d
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 0 {! M( x/ e/ @& D( p/ X) F
9 L5 x7 e% A; ]2 u+ Z& C: c2 Y, _( @
题目1 i' ?2 k, _, `- X
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。0 e" a. t+ E$ E9 C
第一种方法:利用循环链表
o5 Z7 h) b2 a8 S3 \4 r: b9 B#include<stdio.h>
: H" W* g; n( ` i5 w9 Q& {#include<malloc.h>. u. k9 P. }+ C# z
#define M 8 //共有8只猴子
! z/ s4 Z [) S7 T/ f! Y+ \" }#define N 3 //数到3只时退出第三只' X- N, D( _1 }9 }" d9 l6 r
typedef struct monkey
5 C" A/ z7 g2 w: q{int number;% N: p4 @( W/ a7 t' `& K7 q
int flag;; q% R3 y9 C. F. T" J
struct monkey* next;! T* D3 H, z' K& p) B3 o' Y2 m
}MONKEY;
( J! {$ u, L7 G6 `/ u) ^, Hmain()3 N6 D+ A0 K: z" M
{ MONKEY *head=NULL,*p,*s;
' m& f+ k% R7 w/ d" @( s int i,sum=0,count=0;% M/ R' ?- M4 z8 |6 y
clrscr(); //清屏
* Y) o) L2 e8 \' X p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存6 R* `! ]4 E- P, X! q$ f- j3 v
p->number=1;p->flag=1;
7 z3 M# t1 X, c8 R p->next=head;, h' U2 [+ K) s
head=p;- L3 w) |& y+ V# C, s/ _
for(i=2;i<=M;i++). @5 k4 F) f( a- W
{ s=(MONKEY *)malloc(sizeof(MONKEY));
" N5 r6 C: z5 A8 W* n4 Y1 U" p' A s->number=i;s->flag=1;
2 j$ I) j1 k; `$ I8 P8 G/ J/ b3 q s->next=head;
+ Q3 k5 ~9 G" P9 v3 f6 b/ C p->next=s;p=p->next;8 O x4 S9 `1 `# L/ n, x" G
}* n# c! i/ C# c! R+ `" G1 `1 |( P K
p=head;8 z( ~5 ?. s- l' v
for(;;)
U- R# ^/ p/ W {if(p->flag==1)
+ u6 T L: o2 A count++;
" O* Q7 e% E% z$ m( ?1 c if(count==N)
@; q! u' h- K+ n* }) F {p->flag=0;
5 Q2 r2 V, H" k; R count=0;6 G8 {; h1 S% t
sum++;}) s G) i% G. C7 j/ W1 L, C- w1 }/ |
if(sum==M-1)
8 V# W5 X+ w- t/ u6 a break;& w( [6 s6 l, k) S' o
p=p->next;, |' I3 A& U7 T' X# A
}
' @* ]* Z. d- A p=* t! h( ?0 ]5 S/ p( A9 i, V
head;
* x9 P: i) Q0 M# L. k' I9 a for(i=1;i<=M;i++)
) {7 L C# F1 I1 ~1 b& t { if(p->flag==1)
7 j& k. g7 L/ U( K. p% | printf("\t%d",p->number);
/ }& ?+ E: S+ q2 h1 q p=p->next;9 o% ^/ R9 A! g8 m
}
) S# [* e0 C: Z, E8 @2 }& A+ r. F- Z- A* Q% E% L- O2 C* k
1 [6 D: [+ r4 e5 F: u* E
+ ~6 ^% ~: m8 @! l, x" V} # M/ W9 _" T5 F _1 H0 }
第二种方法:数组; D* {- m+ L& f5 B7 E: O" _
#include<stdio.h>
y" y: q# O6 z$ `6 S#define M 80 O/ i1 W( I: Y+ G
struct monkey+ O- f, q2 d- N* [$ C6 O5 [4 N/ q* b
{int number;
, C6 h& U9 Q6 e0 c& i; zint nextp;8 m a; l# [. \* C
}link[M+1];
$ @! h4 {' Z2 n( U* v- g% l9 C
void main()
9 v3 |/ k5 |" ]- g' }{int i,count,h;
/ Z, o2 ?' Z5 t$ @+ ifor(i=1;i<=M;i++)
0 _2 B% y4 C; v+ G* @7 A4 g{ if(i==M)4 W" W5 y! F/ V4 d: H
link[i].nextp=1;
) H5 @0 K. }$ P& W. r( I3 g else! T O9 z7 L4 m6 m, i) g
link[i].nextp=i+1;& w) q+ H& f) T. I4 k2 ^, a, O) `- l7 a
link[i].number=i;
( V( w) _; @5 D3 ]- _9 d M1 v* _}3 g! R% G7 b0 M9 ^- _. @; @
printf("\n");
6 I* `' @1 o0 G0 b7 F! lcount=0;
/ ~3 W k, B/ ?* N4 X3 k5 ph=M;) ^4 p6 @. _$ W. F/ l
printf("依次退出的猴子: \n");3 p% V, r5 e2 s' Z l( a: o
while(count<M-1)# v% q$ g+ e8 d4 z
{i=0;% m7 i& ~' k" L7 i
while(i!=3)
9 |' v' P- J7 R4 O/ C{ h=link[h].nextp;1 n4 e; j6 S- o3 N
if(link[h].number)
; j4 T# h& r J1 l. ?9 ~ i++;}
& G0 T% t4 o1 s1 k8 t, k
( [. ]: B- J* i7 u8 Kprintf("%4d",link[h].number);; @' {9 @/ K) H# p5 X! I- Z& W
link[h].number=0;3 W" U% I1 {# N# i4 T
count++;
" h: u/ f3 l; D# H}
|7 q: m. N. z" n/ {
a( G7 Y8 M2 f. Oprintf("\n大王是:");; Z' h* t" N, C1 J
for(i=1;i<=M;i++)- S; x5 E, e; D; `; _# a
if(link[i].number)6 Q8 C$ D. R& L0 ?
printf("%3d\n",link[i].number);/ z$ c z5 \6 l# \
5 I* H9 L0 L" H* j. ?5 `
1 i) `- }! Z* m) p} 0 Y% C2 ?" `& D* a* }9 g) W
第三种是普通方法for循环
- \" \, ` f; i$ i+ v% F+ w& J/ U#include<stdio.h>8 i: w& k4 r6 O# k: h1 Q, F, d* E9 ]
void main()1 r0 y/ A! M- D0 w
{ int i,k,m,n,num[50],q,*p;+ Q( j: n+ j3 K: k- H6 G) @
clrscr();8 V/ S0 n0 d0 U- I3 r7 v& [" T5 {# t
printf("input number of person: n=");
2 p& w0 _" w: Q8 `" j" ^" p- b ` scanf("%d",&n);2 ]& X! l+ u1 W( a' ~& N
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只# F ^* k3 A0 w; B
scanf("%d",&q);
/ D; g0 D6 ^9 t0 R7 h# i p=num;
: j/ E( O) ?4 C" J7 Z2 y% d# k for(i=0;i<n;i++)
$ z; Q2 y0 K+ D: e% V" n *(p+i)=i+1; E7 ~# Z* c. A0 e6 A
i=0;
' u3 C! G" s/ h$ g k=0;3 _& b/ \- k8 o1 b2 h. \
m=0;; f! z/ {8 f. M! N7 ]
while(m<n-1)8 w* ~& O8 O( h2 v7 Z
{if(*(p+i)!=0) k++;
4 w5 k3 i. c/ _5 _8 ]. ^9 @ if(k==q)
4 {, h U4 P2 O$ Y3 _ { *(p+i)=0;
1 h g$ Z! v- V- f* x' c: x: G6 W- {& e k=0;' g! @: H8 n# h4 r1 A
m++;
" Z+ K$ {, ~, s+ q: H3 F* O }
" ^5 r' R7 T; p: _ i++;
/ D$ e+ d( J6 b d* e Z& r if(i==n)i=0;
/ p1 K3 M: @0 K- q% o# s$ Y }
8 w$ s# H4 o" M0 g while(*p==0)p++;
' x2 x: o8 E r8 s. Q% a- H# v printf("The last one is NO:%d\n",*p);2 Q D* D. R1 `6 Y
getch();+ c* D- a) F; U3 k" v/ e' ]" M2 d
: O, a# t$ @. S$ o( a2 O* A} |
|