|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!$ r) I) I- M0 R" ?1 |+ Y, v
这几天我在忙着编一个问题,我用了一种方法编出来!& @! o2 |; f" ]
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
( V' G) F4 e1 A( T+ K! Q注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
* J+ Z% [" c3 o/ N6 M
0 }3 R6 g( v% _, I
7 s& m- B- ?6 E* `* d5 j 题目
+ N: q5 Y5 |0 \: Z h4 A4 F山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。 X- G( Z* `. u5 D% C" o/ `* ~
第一种方法:利用循环链表6 \/ Y2 \" Q% L
#include<stdio.h>+ c1 [9 @3 O% t* g3 @% \
#include<malloc.h>
/ y k* B0 H1 P! v' U8 b) f#define M 8 //共有8只猴子
2 G$ d( l! C) ~6 p/ y% h/ Y3 Y#define N 3 //数到3只时退出第三只$ B0 W' ]7 j1 T: I/ P% n- l
typedef struct monkey: B0 F! ?! b+ O: \1 Z& G+ Z2 {) {
{int number; P/ f- |% e3 c3 p& r" T; M
int flag;% O! i! G4 N& d+ k
struct monkey* next;
) W9 m& `' d/ a2 n3 O: E7 Q/ b$ W, t}MONKEY;0 @9 V' t# s7 |$ @! J6 J6 K
main()
$ \% z# [) c9 ?1 R+ |# ]) Z+ t{ MONKEY *head=NULL,*p,*s;$ Q- L. Q+ b9 s
int i,sum=0,count=0;% {9 a9 o' I2 E& s3 p
clrscr(); //清屏
, U, }! s0 h* f R/ B9 M p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
/ e L4 a! x. |1 K1 V8 C p->number=1;p->flag=1;: U3 Q$ l8 {$ A3 ]5 ~2 z
p->next=head;" A! m9 `$ g s: x; q
head=p;
! @2 P" |( b! J3 ?/ x0 q for(i=2;i<=M;i++)
: K) t! m* S3 _& ^& b { s=(MONKEY *)malloc(sizeof(MONKEY));1 P! S; ~$ n( @+ B4 x# R$ e
s->number=i;s->flag=1;
" s7 _ I$ `7 T7 ^- U s->next=head;
; `# Y" R1 _1 e p->next=s;p=p->next;3 y9 l2 Q5 j6 V
}2 w, P# s' v: ^* I& I* \
p=head;
" T6 n C. f, \& S6 Z" y# P* W for(;;)
; r( r. H3 A6 R9 t {if(p->flag==1)0 E# J2 b' s r1 P$ ~: N
count++;
2 p7 x2 t$ t% f o( D if(count==N)
! g {# r! `* g) f: X* q {p->flag=0;
! X4 g( O" c4 _) `$ u count=0;- g. D( G% L( ~3 c" J' l2 b# O
sum++;}7 N0 U& T! w# ?
if(sum==M-1) s' k3 a& c" v5 M" A' O
break;/ I) a8 W% \' e- A4 y/ v
p=p->next;
1 q/ W! P3 G, |0 d4 Y, c }
" ~# P0 o! `- _6 `: s) b! [- h/ y p=
( M/ z$ \: P/ ]' M# f head;
j3 [3 m5 r( j* i7 W" H( q for(i=1;i<=M;i++)
0 U7 d& X# P" k& H { if(p->flag==1)
9 k1 Y) V. p4 s. j9 V4 o printf("\t%d",p->number);
/ @4 H7 }5 K) M# \# b/ o p=p->next;& E! x# K5 X; _! `2 _& ^ q! j
}
2 w; u( v: e, O' O# _0 r
2 m, [9 w6 P$ u ] d$ v/ T" C0 W" K+ W! {; q5 q
$ B) L' b2 R+ e6 q# S% z4 S# L0 Z
}
( v& A; q4 O- `& d( v, `第二种方法:数组
- [; q, k5 H/ C% t: e0 Y#include<stdio.h>
; X: S/ a4 y2 @# P& y4 [1 W#define M 8
9 W/ B0 G: c& l$ Fstruct monkey
3 {( X8 ]5 _# P U, L/ _% p% m{int number;
; Y! m. e5 B: `' Fint nextp;
7 [" H1 `: r3 H( a W1 C}link[M+1];
/ I7 p* v0 a" y8 }
+ d1 a. @1 K3 y3 kvoid main()
1 v) k* ^) o( d4 B5 j{int i,count,h;
# R, ~- j, T' K6 B% Q( r# N! gfor(i=1;i<=M;i++)
+ m+ Z$ L. G l% `3 h! M- b{ if(i==M)9 B/ x1 T! R2 N: y/ ~, ^
link[i].nextp=1;) a" l5 @6 q# |& @& ^ y Y4 _
else& K$ |7 i1 ?' x k
link[i].nextp=i+1;
( G' {+ g- _ q& P6 K% i link[i].number=i;5 B9 @# g6 O, c: V
}2 |9 X: o) Q7 D- Z6 T1 r
printf("\n");
" H/ P3 c, _' k5 A6 F9 Jcount=0;
' V( y" U4 k! q' {% S7 q1 ~* Yh=M;
! M' r6 s$ f: l1 m4 fprintf("依次退出的猴子: \n");5 L$ H2 f7 j; o
while(count<M-1) {: v( b) I0 G9 i% v
{i=0;! B1 i" J' c- u7 C( I( j
while(i!=3)% F ?. H* M# V; y8 V* ~& u
{ h=link[h].nextp;3 \' g9 R" @: B2 {
if(link[h].number)9 u) G! I6 q8 s7 {! R
i++;}8 ]- w2 h+ s) L* ?; s* ]
: b& s2 Y( P" o
printf("%4d",link[h].number);! b$ _+ w* N/ G P4 b
link[h].number=0;
3 M6 S3 G' L. ?/ @count++;/ h0 X2 N' {4 R# F1 O" S1 y2 O5 ?
}
8 |. T7 O9 G6 C2 `3 |% m# n5 E2 p, ~* ]4 J. e8 J
printf("\n大王是:");
" m: o% {; D3 d# u: ^- x( f' s% b for(i=1;i<=M;i++)
! H z- h# {) F if(link[i].number)
! Q; l9 L6 @& _0 N/ x printf("%3d\n",link[i].number);( j$ E+ g ~9 g0 f( |
8 X; G8 a. N2 B- m* Q6 \
( S0 c3 N$ v$ d3 n: i}
- A9 Z& G+ m9 i6 f$ m第三种是普通方法for循环4 h- f5 G4 B& o! P) l k
#include<stdio.h>7 ?6 W! q5 A# P6 ~9 K3 p
void main(). V/ T8 m1 C3 a: O% o" M
{ int i,k,m,n,num[50],q,*p;
6 q8 b% R$ _$ R" W+ s3 P, K clrscr();) A" u8 [5 k% K$ R
printf("input number of person: n=");' J# X/ `( d' i |- n" }
scanf("%d",&n);; B/ i& D- z a% ~5 x
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
5 y) V3 L1 v _; D/ H scanf("%d",&q);
' c, n& ~' l" s/ h p=num;
6 V; y# e9 x6 X0 w: L8 B2 s for(i=0;i<n;i++)0 U& I4 M2 E6 e4 b' g/ g1 [( s, P
*(p+i)=i+1;
" B( f8 E6 F" R( e$ k/ [/ o i=0;" o6 J; v5 k+ R
k=0;
1 N3 b! J; K W6 ?0 H$ b1 u* t& Z m=0;1 @% N7 k- q! H4 t( `
while(m<n-1)7 T" w6 C) n; w% K
{if(*(p+i)!=0) k++;
/ a. v- P. j ]6 ^2 U if(k==q)
( ?6 l( N" t. [4 \ { *(p+i)=0;
6 o6 A5 P* _' X+ n+ s3 B k=0;
: k; a/ e; _8 F m++;
# F' h( v% n" N0 L8 k! n }. E. k" b9 k2 T+ i* w4 ]
i++;
/ x. \2 t' A& y4 \) u8 w if(i==n)i=0;& A; v: Y( r; G* J% X$ Z3 i6 Z
}7 \) n6 E' K9 N! G0 h
while(*p==0)p++;& s. r9 j+ w+ M* v- D; M0 j1 O
printf("The last one is NO:%d\n",*p);2 ?" e# m j0 G; ~' A# Y
getch();
; v5 E# n8 y( Q7 |7 a0 U5 d/ k0 V' X4 h. c7 W, b: r! S+ }6 H
} |
|