|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好! S# i! ^# f2 O" ?( n
这几天我在忙着编一个问题,我用了一种方法编出来!
$ P, n z! i' g4 m: ?但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
% \0 O+ U6 M0 q注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
5 M5 J+ j1 O7 [3 B" e5 G* H
X# J" \ }" C, Z% [8 c! I* ?+ h7 o
题目. J( X( ?- a1 y- l
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。3 g2 f6 _; r# ^/ `7 N
第一种方法:利用循环链表
( S# {1 p5 {* p' Y" T. \7 g6 y1 _#include<stdio.h>" h5 r8 w7 E; T& ^
#include<malloc.h>* [0 Y# F& ^1 q$ N: G7 O* n( y& c( Q
#define M 8 //共有8只猴子* k3 }7 D7 \3 c' V3 w7 ]3 h
#define N 3 //数到3只时退出第三只% ?; Y( {% z5 _. n6 U$ B
typedef struct monkey
& U( [* e5 B2 x- m# h" Y{int number;* j4 ?$ M/ U8 O* Y
int flag;: q& v7 T8 K8 s/ @' H- @( K6 V
struct monkey* next;! Y: [7 G+ k' r6 K1 M8 y8 Q2 d
}MONKEY;6 S' D0 Z! v j% i
main()
; {% H7 X8 G9 ~0 L" K{ MONKEY *head=NULL,*p,*s;, R9 m5 G* M7 |9 h* P5 @" \
int i,sum=0,count=0;* H5 d. X# _# M6 Y4 K: f0 G4 e6 g
clrscr(); //清屏
3 O' n! ?$ k' k p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存& A5 U# ~- i! M8 |
p->number=1;p->flag=1;$ L0 R1 h& ~) T$ n. f: k
p->next=head;! T1 u! t: W7 d) k7 [4 h# B: h7 ?
head=p;; V* N. e# O) Q
for(i=2;i<=M;i++)( R2 ~& L; a$ o; |$ k) u
{ s=(MONKEY *)malloc(sizeof(MONKEY));8 W9 p3 K2 h9 b3 c6 s6 ]9 H
s->number=i;s->flag=1;* u) F# G5 B4 L( `
s->next=head;! ]7 W! R. ]4 x% I; a8 \
p->next=s;p=p->next;3 X! R, m3 y" _9 L
}
/ f" g# ^/ A, A6 A p=head;
: \6 `) _: H' u for(;;)
9 l/ X/ A" q; q1 G {if(p->flag==1)
& Z! F6 V; @) Y3 l2 d5 z' g count++;
4 ^+ w. G# y7 b: i if(count==N)' X/ w9 K4 T3 c: i" ]$ E1 F
{p->flag=0;1 s6 d- f1 ]0 X2 y: P
count=0;
% h! O3 G1 J) c7 G# M sum++;}
G$ q: ~7 M! @: E6 V$ } if(sum==M-1)
8 r! ~- U; q5 q* r, Q break;0 c% O! o2 |/ ]
p=p->next;
" H# v# y# P2 f7 g% ] }
& p8 v) h% j* U! u6 {6 k p=
9 s7 D I6 R, ]" P6 ] head;
9 |0 K) N) c9 e for(i=1;i<=M;i++)% r& C% ?# q# B6 X4 b
{ if(p->flag==1)6 R7 Z: u9 I s, S/ x3 Y1 A$ }* q
printf("\t%d",p->number);
6 s6 b% y* H% K! d: d p=p->next;$ x( \2 ?8 I# U7 T' A* `3 b
}
# r. f# g# L0 N3 g0 F& A8 L8 |& p
# n6 z1 r0 j p" }( U# u- Q
/ k! \4 _/ p& r/ t' U/ i: I- L5 y. {
}
* P! W# e5 s, I# W* z' G第二种方法:数组
3 W; k! ?# V) _/ V) f#include<stdio.h>- E1 x/ u' Y) c0 C
#define M 8
3 J$ J4 k: e3 |struct monkey) D7 W9 i5 _0 P) e9 t
{int number;4 S6 i6 [. I: _& ]. n$ {
int nextp;8 n+ s" i- t1 S& q7 ]( f
}link[M+1];; Q! {( x; s% V
5 Q6 t& V6 ]8 i
void main()
# T' l2 v E7 |{int i,count,h;
+ g* }: U8 a9 H3 [for(i=1;i<=M;i++)
1 |& |6 z1 s# ~4 d1 O. J0 V{ if(i==M)- O R8 z$ I$ f( p+ S% i
link[i].nextp=1;
+ y2 `4 @0 p) h else, ?. U8 }/ D$ q- Q
link[i].nextp=i+1;% J6 x6 I+ o5 o. i' V7 X
link[i].number=i;
# R0 A& {. V1 F& u ?}
8 N6 X4 Q5 g5 @- t2 n aprintf("\n");: U8 b0 H- s$ F/ Y8 R5 ~% I8 s% b
count=0;% ]1 K$ k* L* i- U2 k/ l7 [
h=M;
. B* |8 Y. u0 d2 j" ^! o+ gprintf("依次退出的猴子: \n");7 M, _1 O) f5 }% j1 ^! V
while(count<M-1)5 _% N4 ~" s* p& G1 h2 y
{i=0;
6 j$ m% E2 Y; B2 w$ W3 L. rwhile(i!=3)
( v1 N; Y% a8 S& e* O+ q4 {$ w{ h=link[h].nextp;, z6 N, A- u' Z ?- D
if(link[h].number)7 M( R1 o1 V: U( v, ?$ Q+ f
i++;}7 O7 m; x* O3 I, q9 x& y. {
5 ?, a2 V' n$ @% s! P% A7 L. q
printf("%4d",link[h].number);9 W. _7 |! x& r: v
link[h].number=0;
8 l( q% e/ F2 C' _; scount++;) C* h2 ]% T, j3 d$ `* R
}7 s, G# z9 D1 ~0 d9 [
" T8 e% _* q& W4 x% o+ T- _; d Nprintf("\n大王是:");" N) ~: n" {6 ]4 c
for(i=1;i<=M;i++)' ~; M* u; y# O( S% W
if(link[i].number): C. U, o- l/ Z
printf("%3d\n",link[i].number);
8 E+ }1 E+ a0 e, b# o( h z* E9 H7 |
9 A) ]3 q# b) l" b" |2 Y# p. |! z/ n* d1 b, [' M( i# J
} 3 W" ^: [0 Z9 O2 x/ q) F" O
第三种是普通方法for循环+ r( G: B% T* d) _# l* o) E
#include<stdio.h>1 @! o3 }% h! I8 K8 [2 c0 s) k: p& l
void main()
8 C W( O6 ~; j# C! r6 E3 S{ int i,k,m,n,num[50],q,*p;, U+ ^ r& y- L+ d1 m
clrscr();
5 a" M5 N$ [+ B7 f/ P* s printf("input number of person: n=");) b+ H& o' S( e5 N
scanf("%d",&n);
8 Y N5 L% N* h- Bprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
3 o% W1 D8 r1 V" i: ] k& j6 x scanf("%d",&q);1 T0 S% Y6 i# Q/ y) B
p=num;/ l% V# h* L% ?( v. H: q
for(i=0;i<n;i++)
% \+ L8 d- j9 d/ } *(p+i)=i+1;
# h1 P# a7 }9 ] b3 U. U" u i=0;
# O1 b1 ]2 p/ q$ d+ I k=0;
. N& O$ T, w# }: r( |$ O m=0;5 T0 @# k! n/ N% x
while(m<n-1)
! V/ a/ d0 j4 l {if(*(p+i)!=0) k++;1 ~7 @9 z( { N
if(k==q)1 k2 x) K2 Q( K( w# a" q, c
{ *(p+i)=0;: g4 U2 v& j; w" O' C/ ]
k=0;$ `4 w g% V! H: p! t2 Y4 _* K
m++;
: I) f9 ~$ T: X+ F2 d( @, t }/ L* [! z9 |6 S, m0 U
i++;5 a9 H0 J+ \$ l1 [+ @
if(i==n)i=0;
& E5 E! k' k- m- j! N: X! }2 e }0 X, f$ h# b" _ C& d
while(*p==0)p++;
x: J& o$ v4 A y printf("The last one is NO:%d\n",*p);& X0 A) X" L3 E
getch();
3 [8 q. A7 S3 G5 v' L" t& L
2 P. k7 x' P% Z% m) X r} |
|