|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!6 r: @* i* {6 v9 E% l8 g
这几天我在忙着编一个问题,我用了一种方法编出来!
8 V0 i7 s4 r; V# y2 d& Q但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!2 y3 `* K. @) ~$ N
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
+ @- D5 K/ E- b+ `. } Z, `. G. d) |9 B, v# @" E( r
2 F" Z" v5 D1 h- v3 E3 t
题目
3 q0 u+ Q% y; E( M( n0 i山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。) H2 [% v0 i, M
第一种方法:利用循环链表. D% F2 d b' t* Z7 h
#include<stdio.h>! a; O7 j Z1 f& w2 n, C
#include<malloc.h>8 z+ I, E% p8 V$ H
#define M 8 //共有8只猴子5 E( Q: _! F5 ]3 p; v
#define N 3 //数到3只时退出第三只
3 [- F* Z+ x* S4 j) e6 mtypedef struct monkey
3 l) W$ _* @1 L$ h1 b{int number;# H/ _: m/ M% Y5 o% Q. T$ F
int flag;
) Q8 Z" v5 u/ |3 Z; T1 v$ B+ pstruct monkey* next;7 N( S* Z/ ^5 t7 @7 s' ^$ U9 s
}MONKEY;
$ I+ K5 Z5 o7 H% S' d) S) smain()
" f+ U) F6 m- G {9 j0 @7 {$ ?! e$ A{ MONKEY *head=NULL,*p,*s;9 }* }0 G+ `2 |8 L0 }) B
int i,sum=0,count=0;- U1 U( z* I# F/ `5 e& r
clrscr(); //清屏
0 t- L, ^" K8 A4 Y4 B p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
! p4 Z% X6 Z( F1 N p->number=1;p->flag=1;# n, w, B9 y4 C/ S' v, @
p->next=head;
7 w" r" o! L7 \5 D# ?* i% [ head=p;
; X. `, M6 V$ g" ?, t5 | for(i=2;i<=M;i++)
# V+ b: n O3 d4 H& _ { s=(MONKEY *)malloc(sizeof(MONKEY));
7 S5 S5 \9 q2 S s->number=i;s->flag=1;: w% r) s3 P( d( E. X
s->next=head;6 K3 s5 J1 l# Q9 n+ v
p->next=s;p=p->next;
4 w4 R3 I$ Q. s# s9 I( m( S }: v6 G% \% l' |7 Q
p=head;# h1 a# ?& H3 s& v1 H/ g) M( z
for(;;)! u% u3 k4 k; u0 q0 w: C
{if(p->flag==1)4 d9 S U% p6 g6 S0 K+ A Y% _
count++;
* a+ W/ L9 _# D; D4 b if(count==N)
. T9 L, q# P C+ u {p->flag=0;
6 x7 k' m$ ~. @" a) h9 U6 O0 z count=0;! v* `: V! n) s& D
sum++;}
' w4 W% [1 v' K if(sum==M-1)
1 T4 N7 L+ r- p5 T9 c break;
. b6 u, I, w4 e5 ]- i p=p->next;
7 F( l) \, E1 g& ]( q }# ^1 a# R1 O8 F; Z* \
p=
! W6 n" o( ~, | head;0 d, M, b0 a# u) v2 H( Q1 Z9 z' n
for(i=1;i<=M;i++)
( x' P' ~8 j+ S, o& T { if(p->flag==1): @% D7 b. m7 G$ G* n
printf("\t%d",p->number);. g. ^; R% j7 e9 m
p=p->next;
8 H1 r& {5 T9 E9 q: w6 H/ B R }- B8 H4 I1 b) z
( |- s+ L: Y8 l" u
9 b K; R. H+ j, R; }2 P: O7 A: V8 w. w% A0 Q3 j; J& z
}
; Y2 ^9 b% i5 P$ E第二种方法:数组
1 R$ C7 v/ c3 D8 M7 D: o% O#include<stdio.h>
; P; _! Z7 Z" P4 z( ]6 H9 F#define M 8: l3 B/ q" W5 F( Q" x' _0 J$ i
struct monkey
9 w/ } s/ v3 S1 K! [{int number;/ E- ?4 _$ a8 J5 q$ {- B9 u/ y
int nextp;
8 U4 G0 B- \& j; s$ V4 D7 }9 C}link[M+1];
: c* N3 w/ U' V0 L3 @0 b( _+ A2 W* m, M. E% s7 L
void main()
( @( q( L+ i. |/ d{int i,count,h;$ C2 ]. _9 d9 F- v
for(i=1;i<=M;i++)
) `3 x- t8 v" _1 T4 g4 n! D{ if(i==M)
6 ?& Z6 o5 A2 z; n! _ link[i].nextp=1;4 B1 I/ u1 r' p+ l, V4 d
else6 _( ^# N1 V0 H/ M- Z. a* F' @
link[i].nextp=i+1;
% `1 R9 N4 t6 l link[i].number=i;
" \5 v3 l- Q4 n! X" ?}) D7 e( v& g2 [; [; ~8 w
printf("\n");
$ Q# a: x+ ]+ S8 jcount=0;
" A$ I6 X5 s- K7 A, E" b) rh=M;+ f3 S, d3 U0 T6 Z; k1 f: m2 D4 R
printf("依次退出的猴子: \n");5 e5 O; Q3 X$ `( u: } T
while(count<M-1)
9 ^2 v6 F9 v" S: ^1 |{i=0;
" B( X$ T$ Q' x% i! `/ Qwhile(i!=3)+ I2 i5 m0 b( F$ j! x+ v
{ h=link[h].nextp;
5 c+ M/ ~7 `& x; [ if(link[h].number)& z- f0 S1 C- A, m: Z- B
i++;}8 B {# X. i* d" \4 d& ]: v
" k z1 H; j, bprintf("%4d",link[h].number);1 x2 [/ j% o- Z }9 G# K( C
link[h].number=0;, f( {- k. f7 K
count++;
& F8 @( Y5 y1 y0 g% a& G7 T: O}
b) Z% F( t4 r# A
% o$ w8 \" J1 P, ]printf("\n大王是:");
+ l1 ^* {$ K; ]: Y* D for(i=1;i<=M;i++)/ E9 S9 ~+ G( r2 u* v, @
if(link[i].number); C7 _; a) t$ d: `9 J% K$ `$ I
printf("%3d\n",link[i].number);9 ?& P: J) {7 c
0 f& _( o* j6 l+ P$ D$ k
) i$ k" B* o: ~
} , I1 y& y4 M' O( F( @' R* D/ |
第三种是普通方法for循环
+ c6 B s+ H1 |" b( m#include<stdio.h>
9 z& i, E; ]5 _" v9 i7 zvoid main()
3 W; }8 ~6 g) G/ ^3 z+ B6 T% E8 S{ int i,k,m,n,num[50],q,*p;5 ]& j4 N/ T: L& U0 D
clrscr();
B9 c5 x, b4 K: g( K! d printf("input number of person: n=");1 V9 g" ?) X( t4 S7 v4 n/ y/ U
scanf("%d",&n);
; G$ n* k6 Y2 p5 P/ sprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只6 w! N% }) m$ {+ z; F* U" Q( \6 Z
scanf("%d",&q);& o; h' s) A6 Q% P5 R
p=num;
* I5 [( O2 }6 U: O: h% m6 `* B; [ for(i=0;i<n;i++)" k7 A8 y9 X- Q3 K; J# z# F2 ~
*(p+i)=i+1;
; E7 R- \: @# f6 K i=0;9 e8 {8 u; d0 ^" m2 \
k=0;% s8 X; R, f6 m3 y
m=0;: U- k+ R/ i7 J3 t- e9 P) b: k' e
while(m<n-1). a& Z+ q; B$ S. j( ]
{if(*(p+i)!=0) k++;
: q$ Q( c1 r7 V2 v if(k==q)$ m5 u: [0 K5 V% F0 y+ Z
{ *(p+i)=0;& k- u. `) \! ?$ ]/ ^
k=0;0 |7 J+ y! R6 J1 m% m
m++;! h/ j, K6 y8 H+ P, W: l
}
# b1 a* T- T- J1 u/ F" O# h i++;$ ]4 [6 M4 [! p5 K# I
if(i==n)i=0;! J$ ? N9 i! D# f
}
) s* K+ |, z; }* Z: i* y$ C while(*p==0)p++;5 N' N5 P4 @2 X: W1 R
printf("The last one is NO:%d\n",*p);
( o, A7 y$ P9 P, d: e3 S7 u getch();
& W- M: v- ]* s/ i3 G
5 _9 U" v- T& T} |
|