|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!2 I: i' K0 J# a! r8 q" f% W
这几天我在忙着编一个问题,我用了一种方法编出来!. e4 l; o# Q7 W
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!, ]7 C- K; a( j
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 0 P+ M5 S4 z/ f. Z
* u# b! a% A( e) D2 }. Q! C& N$ ? ~# p( i, u
题目; o; Z- J% y3 t$ I$ J) a6 f+ y- C
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。8 i) f6 n$ c/ }
第一种方法:利用循环链表% B6 e P* ]! u/ n; b
#include<stdio.h>
! J4 L v% D8 c' R% D4 D" j1 p#include<malloc.h>! b6 {& ]: |: f6 A: S8 ^
#define M 8 //共有8只猴子0 l& c0 }" }$ y2 h/ d- G# J
#define N 3 //数到3只时退出第三只( y# S! z, Z% |& [. i& x
typedef struct monkey1 n: w& h0 V- N2 J3 d( V' I1 Y
{int number;0 V V& c, y1 N+ \& p5 ^1 ~
int flag;
& |8 X$ ?- S0 J$ I. X% sstruct monkey* next;
: |! ^2 l; ~ E& {5 X0 m}MONKEY;
$ F3 C$ H$ L3 j) wmain()
4 P( i* q6 b# J# {9 \/ x+ C{ MONKEY *head=NULL,*p,*s;8 \0 ?% [ t1 y; U7 r/ g
int i,sum=0,count=0;
; l0 d' K8 f- C clrscr(); //清屏
& z: |# N9 i; i5 E1 w p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
' c5 [ c# W- T7 K p->number=1;p->flag=1;$ G* m |# K% [) ~
p->next=head;) v7 K7 ^& K: q2 Y, ?4 |6 _
head=p;) I! g U2 r/ l4 ^
for(i=2;i<=M;i++)
' O7 o* S) r% \: E7 z& w2 u { s=(MONKEY *)malloc(sizeof(MONKEY));' {; R7 e- l5 a9 R% I3 B
s->number=i;s->flag=1;, A" w1 T z2 I+ \: j# |
s->next=head;( R0 W) k5 ?4 ]+ O$ ^, m3 O
p->next=s;p=p->next;: v' P* S5 q6 e7 N* F( m
}5 [4 V v D' a: v
p=head;
% N& \) Q" X- Y: h. v1 } for(;;)
6 E" H" P6 M9 y% j {if(p->flag==1)
" G8 M' j: F, B/ [& R" Q count++;& B! l% A- t; U- e
if(count==N)
' x$ \1 r) H$ M {p->flag=0;
5 \* ?1 q& \ Z# o! k count=0;
3 S0 E0 T0 `+ P7 C: F sum++;}4 h- }1 D7 f) a0 ~+ B
if(sum==M-1)& y7 @7 V4 p( l9 g! ]# a4 e7 e9 O" ~
break;
4 ~3 d, e7 S2 s6 Z" ]* {8 m C* G7 _ p=p->next;
0 J2 o. p `& P/ G& G; W1 c }
& s' c6 k% x7 O, R p=" o! R# \; W& Q" g; s
head;
* w# s6 x+ f# H for(i=1;i<=M;i++)
* M: a. k6 }5 h0 @5 e* k5 E { if(p->flag==1)
+ t! W" a+ w5 h5 e/ ?* I$ n printf("\t%d",p->number);" Y, k. _1 ]3 ^; D" y3 S
p=p->next;
0 ]2 K0 d5 W' h7 h }2 [/ z8 ?" w- R0 e
3 i; L0 s* \3 y" m* F! B3 a! S3 t/ `% a2 d9 N- q. m, n
e' b- f- n) J2 w6 k% q- N
}
" ]' j& H5 J! g: U" _% N' {0 A. W+ s9 E第二种方法:数组
0 C) R2 v. r. @" P$ t/ |+ Y" j8 z#include<stdio.h>
) b8 t' g P# u. F# s( N; v#define M 8
& R5 N1 a/ u+ r! d5 M4 |struct monkey
+ o% q! k, S" [9 L \, Z: W{int number;# O- {3 g; n r7 |3 v! }
int nextp;9 h; _# _; M% F# ?
}link[M+1];2 M3 X6 ~( k% S
6 T4 u0 c% F- M2 J9 S2 Xvoid main()
' j) U8 J, v, k {, s! q5 F{int i,count,h;
: p& ~8 K J1 M# cfor(i=1;i<=M;i++)
5 U8 q: r3 W, W( d( j" p. A+ B{ if(i==M); K0 ?! L6 J" R/ F" @
link[i].nextp=1;
7 d \. o- F. p1 E. F: w1 ^! |4 Z else4 j$ ]) f% [8 W$ \, Y
link[i].nextp=i+1;9 o2 H" [1 [6 n+ l
link[i].number=i;6 i: L: R: e# [5 L: x
}
5 \) j' O3 |8 V" V& l4 N; A1 vprintf("\n");
: s) D" K3 c- \+ `7 M8 Mcount=0;. w0 a% {. S0 e/ u6 P, B+ a
h=M;
+ F5 g/ U9 U" v' Nprintf("依次退出的猴子: \n");5 S3 x3 x: E w2 P9 R* ^9 l# ^3 I
while(count<M-1); N( [4 k! w$ m. p0 q
{i=0;! F# N$ a; J; C# B2 b' t7 F
while(i!=3)' \& \) |5 C) t' n, u' S# T
{ h=link[h].nextp;
. p( |; U7 t* R) o* |/ s# f0 l if(link[h].number)) ~5 {4 p5 x( R8 Q5 _
i++;}
" r9 [2 v$ F$ p1 Q, Q3 h1 h$ t# P% A' U3 `' B6 C4 E1 q: U
printf("%4d",link[h].number);" f, _" G6 `7 i, G* n) L
link[h].number=0;
5 b3 ]. ~9 a' Z) Mcount++;; F b# P: e! \0 f0 {- K
}
- G& j' k' q2 `8 r/ `3 S
4 h3 c" G7 M+ E# y& y- _printf("\n大王是:");
$ v q/ y2 G$ x6 q' R3 ` for(i=1;i<=M;i++)6 U2 k2 U5 R- S
if(link[i].number)' C& y; X/ ~/ s$ N7 D9 b, }6 {
printf("%3d\n",link[i].number);6 T" i6 b2 l {7 s, u' t& Y o
/ T- n% T7 w' H% W+ M" J
$ i, X( `( D" U6 E: i
} 5 X0 e. J9 ^, e3 D8 I
第三种是普通方法for循环
7 ], h/ |4 J8 ?. k6 [- b#include<stdio.h>5 g* u" t+ B F% i
void main()
8 q: x0 G4 w- \( n- O7 v{ int i,k,m,n,num[50],q,*p;& L. @' R0 h) w; i
clrscr();% q0 W# g. D$ `
printf("input number of person: n=");
! { T: k4 q a- W0 {" \2 F& q$ d B scanf("%d",&n);
3 z0 p) w) G \* }6 D; u! X, Hprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
1 c( D/ N0 l# g* h* K scanf("%d",&q);2 L! T( A9 D( Q! {+ Y
p=num;
# H) P, J. w9 h" N/ z+ L" k4 D for(i=0;i<n;i++)9 c4 X6 e1 p8 E8 E
*(p+i)=i+1;4 ~& @- Y0 c: {8 b& x% C
i=0;; w8 t( U: l2 C$ g9 w5 ? {
k=0;$ l% _& Q# v8 [; L
m=0;3 t3 K8 J% j0 `) x- o% N
while(m<n-1)
: ^ ~( d" T; J: [1 B8 J" H {if(*(p+i)!=0) k++;* @) z1 O" G; F% \% D4 ~! i/ \
if(k==q)- T. C | `/ x
{ *(p+i)=0;
4 R$ h$ C: B2 Z2 l k=0;* z, {1 ]' M& R
m++;
$ B i& l3 Q& Z: P9 H$ [& H4 W }
. o6 Y8 H/ H: m4 y8 N i++;1 C; R1 T% J# K- K
if(i==n)i=0;. n' D" w, X2 i# O! Z% ~
}
1 L$ R5 C* h3 H7 h while(*p==0)p++;
3 X6 F+ N- x: |& y printf("The last one is NO:%d\n",*p);
+ ?: n/ f( H% `7 g) z4 O) {0 h$ G8 i getch();& b' c, o% }; k7 u2 x. `9 }
; Y: R4 J6 `* ]! g
} |
|