|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
2 _; Y4 D8 c8 E$ a; J% Q这几天我在忙着编一个问题,我用了一种方法编出来!. ?) }5 ~: O1 {$ ?9 l- l* `! z6 B4 {- y
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!3 Z w5 K- |' C$ ~# m
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
1 f( ]4 o$ e: K% ^ j0 ?3 \( Z! Y" H4 y, h4 q% T
. L: G2 D% s( g8 m/ |: s 题目1 \# q$ O; w0 r
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。5 ]2 n* l7 @- Z
第一种方法:利用循环链表
6 c/ I2 O8 \$ E X6 H0 c#include<stdio.h>/ \* I) M0 W; i2 A1 J
#include<malloc.h>
]6 {1 S0 `3 F4 l#define M 8 //共有8只猴子* ~; g, m: C7 h o. c9 {9 Y0 U
#define N 3 //数到3只时退出第三只( H& [- b% Q2 h0 A, @
typedef struct monkey
# q5 d: e b! N- z$ J% A{int number;. ^# [" ?! @, p Y0 `) h Y
int flag;$ r! l9 }& p/ J/ x I' j/ j
struct monkey* next;) V# S' ~7 e- B' T! D; r
}MONKEY;2 i7 n6 D v1 x7 G" o+ g
main()
2 P7 R }+ B7 g; S5 K{ MONKEY *head=NULL,*p,*s;
" J3 @; c3 O6 H* R int i,sum=0,count=0;3 ]! N6 i) T7 V4 y% @; E# ]
clrscr(); //清屏
% S) q H; ~ W# g8 F p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存+ p1 b7 F8 X0 |
p->number=1;p->flag=1;
0 m5 L, `! t. L! ?1 o' V* l# \ p->next=head;, ~ @( S# q' T9 }5 C, K- t
head=p;/ u! Q* @2 f9 x+ d
for(i=2;i<=M;i++)" A7 T, c, ?/ z7 _& a# `
{ s=(MONKEY *)malloc(sizeof(MONKEY));& Y% w5 z A' @$ k% i% x$ C
s->number=i;s->flag=1;! X# b7 g: d! C& H: F I
s->next=head;8 J- a* d$ \- o W
p->next=s;p=p->next;) Y( |5 |6 T' q7 g/ G3 s
}2 E C+ V( x" T( l
p=head;
7 p. R. R3 H, w7 g/ ]+ b- x8 Y: { for(;;)" _( ~% i+ x! ^ K& K" P; s" ^& p
{if(p->flag==1)
1 o$ E3 e" {) i3 i9 B count++;3 M- q6 H) E& o3 H2 O# {$ Y* a
if(count==N)
+ E& e6 G! R$ ]& ^: G$ d; Y {p->flag=0;
3 s4 R' g( E: V0 d( x' [" l count=0;
, v4 Z0 ]8 _0 f8 n1 l6 \, ?& L sum++;}1 l3 h8 E( s" l$ S/ ] W8 `9 V# Q. A
if(sum==M-1)" Q# V r' q( o# d3 }4 }) C2 A
break;
; V4 O: I# z* I2 ~ p=p->next;
# T7 k9 R* g' f4 D }& O9 L7 V! K4 a5 I# b5 V
p=
) e2 P9 D1 Z2 n3 |; {; ^1 p head;
7 [. L9 n3 g5 ^, d for(i=1;i<=M;i++)
6 j$ Q, g0 o. h7 e5 m; z& A2 p, x { if(p->flag==1)( R. U* [1 `0 X" i. E3 s
printf("\t%d",p->number);8 Y$ y4 ?& C$ W' u
p=p->next;* l9 y( }! j5 F4 q
}. b2 P) d1 d8 T$ t7 y
- y9 e+ Q+ O- |. T
z7 F; l3 e* W2 b8 X: @4 K. i1 ?) t/ S; |2 _
} ; d/ k& H5 A( y. A
第二种方法:数组4 ~) E6 y6 J( p
#include<stdio.h>+ Z+ a5 y$ H( J+ g
#define M 8
* k/ U/ j. I" dstruct monkey* `% m8 Q ?' b1 \1 [7 }+ k Z9 k
{int number;) _0 [& }! z' A) u' Q
int nextp; D; ]9 @4 B1 y9 i2 ~
}link[M+1];. k o9 L' H" _8 c% @
) m* F+ g- t* f
void main()/ _0 i0 Y9 h7 n& E8 _: D0 w, q$ b
{int i,count,h;
% `9 k9 x! s4 I( O6 o+ ^0 T) [5 \for(i=1;i<=M;i++)! e2 G3 S0 p9 H' c, V% h6 o% k
{ if(i==M)7 `# n6 f7 M/ @9 h3 W* ?
link[i].nextp=1;7 R( O m3 m# T' r% `
else
0 C g% w& Q4 m' [9 p link[i].nextp=i+1;: Y" I3 |4 e+ n0 I
link[i].number=i;
2 H; Q- h- ^7 M2 z}
8 [4 | q9 q8 c1 |& M" b- R/ `3 cprintf("\n");
# m/ i: M8 J; F0 t8 icount=0;6 \" a2 o6 e* }8 L" K* e
h=M;
( E7 i d* l8 g8 I3 Nprintf("依次退出的猴子: \n");
7 R4 S: N/ E6 iwhile(count<M-1), V- V- a% Q: P$ s9 B! F2 v
{i=0;
$ Q4 ?; l; Y/ x, Jwhile(i!=3)5 E3 M6 [1 e; T# d5 Q2 L. b' c, i
{ h=link[h].nextp;
, C, m7 v# M% [% g2 V0 I; y+ ` if(link[h].number) Z" J; |2 Q4 D `" x
i++;}
& s5 }8 H$ ?' L2 s0 S7 A& l' p+ j( D* n
printf("%4d",link[h].number);
1 I% c J6 q7 Z- K4 X6 Nlink[h].number=0;
" L& n! Y. L: a& [2 H: g& r" Bcount++;/ l0 g1 \6 n$ l- ?8 o; j0 W
}
* x- B, F' {/ }* t+ G
* {! |( {7 F; N0 |printf("\n大王是:");8 F+ b7 n8 p+ k* ^5 H' y
for(i=1;i<=M;i++)% e% ~- v8 Y( j' x' G. \
if(link[i].number)
3 {2 o8 Z+ q! d; T printf("%3d\n",link[i].number);+ j9 {7 U; e, ]4 J6 k
# K! F& S( A* ^% m, s9 |3 w$ s* N6 ]# ]
- y5 Q% Y ?9 G3 }
}
) z q8 Q4 X7 x第三种是普通方法for循环) z3 r5 Q5 E: E- c: L
#include<stdio.h>
1 S1 M7 p9 L( W1 ~% G4 A1 Ovoid main()
! g! ^# t `* |/ Y3 J' k: K{ int i,k,m,n,num[50],q,*p;0 q9 ~9 p N: \ o0 |* `
clrscr();* e0 f: ^6 h: M. {% P: `$ S
printf("input number of person: n=");
5 S9 i& H. g0 u# z3 l3 I, }8 ?* B scanf("%d",&n);7 E2 L) k& L& U1 v' h5 Y
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
8 U/ @! R( o* i. \2 ?# U2 f8 y scanf("%d",&q);) A y$ m, |# K2 m: i, ~4 U
p=num;/ n) E9 R$ j7 r, }' D1 T& u
for(i=0;i<n;i++)
0 V" k3 M# `# Z1 y4 z2 a *(p+i)=i+1;( _ K& ]& c% Y; ]0 C1 ]$ k) f& e- j
i=0;
/ T6 f) b0 K/ n; b7 [' n9 Z k=0;
3 O5 f% M0 }1 ]" C! u: u8 n m=0;+ e& \4 L7 c" V# d8 g1 ~0 [, T
while(m<n-1)
9 N9 D+ d* u/ |6 w' h {if(*(p+i)!=0) k++; A& E& B4 _% ]* i5 A& C0 f% ?5 }- z* P
if(k==q)
+ }- M- i! j- B7 ~ { *(p+i)=0;
$ h5 @- d; E! ?8 P5 s E) ] k=0;
7 w; T% s4 K; q2 C! A6 n m++;5 v7 @' @* y# R- c6 `1 |8 L: }
}
9 v" U$ O% [# W4 C( a$ e9 G i++;* a3 i2 a$ I2 L
if(i==n)i=0;( Y$ h3 Z3 i/ q! v8 @% Y! |# A
}; h- O6 i a( s; _! h
while(*p==0)p++;" n) Q3 @5 K: Q* K, r, }/ A
printf("The last one is NO:%d\n",*p);
' H/ A. i/ P0 { getch();6 C8 v' v. ^9 @( Z# M" B* V
# P% |1 U' |; N" x, D" D3 U
} |
|