|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!7 G! w K. l$ ?4 j
这几天我在忙着编一个问题,我用了一种方法编出来!( N0 h& D# b5 W+ g
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
8 L3 L4 M& Q1 U. R! Q- e* H- D注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 ) \2 R$ B5 Z% _3 X& p0 s1 q
& b* p( y7 }& g5 X8 y
; ?4 m& o/ d; J5 u
题目
6 j/ O" P5 Y" H, U) }1 v山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。/ a5 D4 m2 l" l: d$ }. `9 N& W; M
第一种方法:利用循环链表! [. ]/ Z: g5 v: i$ K. T
#include<stdio.h>
/ |: |4 [: I2 M* I, o#include<malloc.h>) X. q( u7 _1 q9 e
#define M 8 //共有8只猴子6 u G, [! v/ z6 I2 B
#define N 3 //数到3只时退出第三只
0 i2 V+ I2 x+ ^$ E5 w7 Atypedef struct monkey
! P3 m7 o7 D D* k% J% T# e; `! B{int number;% o3 }; k& G3 E" u
int flag;. F/ m3 r4 V& [
struct monkey* next;
% L+ p4 n, f6 }7 D8 K% s}MONKEY;1 B+ C7 I) n' [. w- T, {
main()
/ g% X4 ~9 V% p4 s' f{ MONKEY *head=NULL,*p,*s;
$ q% p- H7 q, \2 t- b* d7 q int i,sum=0,count=0;" x9 ]. t* L# K3 O7 `* Y
clrscr(); //清屏
7 D4 a/ J, P* Y% h p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存3 j% O! Y& }; Z% w8 B+ l
p->number=1;p->flag=1;$ q% h. Q# `* z
p->next=head;
9 x p9 y3 \+ ]6 V3 k head=p;
+ X7 Z/ g% t$ a. G5 a4 O! H for(i=2;i<=M;i++)
5 a0 O" K+ s! F { s=(MONKEY *)malloc(sizeof(MONKEY));
p' o/ ]& o5 C s->number=i;s->flag=1;
7 E# {5 E" i( d2 J$ g& Q' I9 B) k k s->next=head;5 @( O+ b7 D3 {3 l
p->next=s;p=p->next;8 Q7 I* t7 H" d5 i. z3 C4 s- I
}! X% w' P. T; r" _7 L: T$ V
p=head;: @# w. J+ k# r" I) w: _
for(;;)
/ B, [, p0 k( U- t4 b {if(p->flag==1)" e8 U/ y- i6 R! R1 V
count++;
0 l( C! u6 S! ?, l% {) P9 j; W- J if(count==N)
; a# o7 ~/ D. I8 j9 H l" t {p->flag=0;
, {" _+ g4 p% O2 c. U L& c count=0;: j- ^1 d, b. U3 _. Z' y( z
sum++;}
3 c" G+ [' \8 H6 m4 _ if(sum==M-1)
8 H# |, f4 x3 S+ S break;
' r: |1 P2 U6 [7 R D6 E9 d" t p=p->next;/ o" P _6 Z0 u6 |, a
}
% W |9 e* U/ J' B) A p=
8 I! |: h6 g- o- W% q head;
, r& i' q* M8 A, {+ _ for(i=1;i<=M;i++)
2 Z9 i: j/ v4 t { if(p->flag==1)& q. l9 {0 P3 C, J q9 ^' f
printf("\t%d",p->number);9 C) B* ~4 z1 _) t k9 I
p=p->next;
, y7 |7 X4 s! k8 g }
+ G# L1 S$ Z. g/ V% L) t' r$ S$ n/ T' Z# s9 G
% h. o8 q& _! O
3 Q3 q! |( J. @( o} 6 Q y3 v1 Z+ E b% F
第二种方法:数组9 G& E6 z+ j4 D' ^! V4 ?6 i" P' h
#include<stdio.h>% ]# f5 |+ `$ X3 w2 N! m+ ^
#define M 83 V- a3 }5 Y- [' i4 T; W' y1 v
struct monkey8 c0 N2 ~+ q" q5 B! w3 ~
{int number;
6 h# S! I- p. ]int nextp;
( j: C* h, E; s# O}link[M+1];
4 ^8 s' m5 E5 a
! [& R. t( N: P9 K' [void main()# K0 }1 ~/ |) D, I1 u- r6 z
{int i,count,h;. c9 E5 ~8 b6 M
for(i=1;i<=M;i++)
, c5 q6 y9 L- J{ if(i==M) F( w+ [8 j# _, z* l
link[i].nextp=1;
' ?3 }$ V2 {% O else
* Z: s) W4 u" W% R3 C/ s link[i].nextp=i+1;
: f' h( }9 U; A link[i].number=i;
G/ f$ |8 J V( w0 n}
6 r3 m: K" V6 G5 O1 l- d vprintf("\n");
) X# `4 t i7 L- Kcount=0;
' {7 M. T, p1 b/ dh=M;
) b7 P9 W& r" j1 J2 h" R! Z# I. uprintf("依次退出的猴子: \n");
( Y0 n; ^7 ^" b e. T, [6 T. B! mwhile(count<M-1)
4 A9 Y, Y9 |; A$ Y1 l+ R$ y+ Q# Y{i=0;
8 |$ `5 `0 V' ?* Mwhile(i!=3)4 E4 A; F/ v. v( e/ N
{ h=link[h].nextp;, V$ s1 P8 l0 X8 O) m# U
if(link[h].number)
$ }3 d8 v0 ?! W- j6 g i++;}
4 g9 ]. T+ \( c( A7 H* y0 D* U4 L: a4 T& s7 D8 J) k
printf("%4d",link[h].number); V. H& `( F$ O5 R& t9 r" i) a
link[h].number=0;
- }4 N( P' f0 k! y/ _count++;
" N! q- E$ e2 I3 E) x}+ i; K i! _/ R N$ ^* M
' r3 q# O% Q, w/ c- O5 H+ _2 w
printf("\n大王是:");4 R" R% D6 S# q
for(i=1;i<=M;i++)3 A% o, _" w. s% H
if(link[i].number)
1 j6 D" o$ I5 o+ y0 U; @ printf("%3d\n",link[i].number);
- V- J4 s' u! e" E
7 v8 Y3 g: j" ]" I# {& Q9 B
7 B. [; `$ r: }. W0 s} 0 s( q: n0 G/ g
第三种是普通方法for循环1 I) o; ]9 V2 n: }" H
#include<stdio.h>' H& n8 J/ U/ H4 I @2 O3 H
void main()) k6 ?9 [# p- U7 l# {* I
{ int i,k,m,n,num[50],q,*p;
! `4 a8 [# X' l clrscr();
7 j% m5 z9 m6 B) M8 r4 C: ? printf("input number of person: n=");
7 h/ K2 N x' W; X0 n! B scanf("%d",&n);5 m, s, v9 V' ^) }% M1 y: f. h% [
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
+ V( X' G5 |3 G |1 j scanf("%d",&q);& k2 C0 Q q; P
p=num;; I' X8 n# ~4 b; z& M
for(i=0;i<n;i++)
% _. q& J, ]; C *(p+i)=i+1;# q2 L% F5 O& A3 A, z; T8 Q
i=0;5 j$ |" D1 e6 O( h8 V
k=0;$ b9 f: F; j% }3 K1 v
m=0;
% ~1 z9 I5 N$ i; X& y1 j while(m<n-1)% ^. Y+ l" `; d* _: o m! H
{if(*(p+i)!=0) k++;
, ]- b$ W% _" R1 a; \1 q/ { H8 q if(k==q)# Z9 N. z/ c* |+ V6 P {
{ *(p+i)=0;3 \% o5 ]) u- a7 L% f+ B& N
k=0;
}/ K* J6 \2 q" Z, \6 L) X m++;8 k1 g7 e" t( m$ t7 d$ R) V# \
}
$ y, b. @/ ^9 v4 u0 }0 d i++;; _, L" f# s, ]' y# L
if(i==n)i=0;5 ?/ e- x; C0 x6 L, j
}
4 }9 |4 k ^# B while(*p==0)p++;
: \6 q" y2 @# {7 T' s. [5 j printf("The last one is NO:%d\n",*p);) E) ~0 f6 v( a5 e9 ?# s# L
getch();5 J; u& a1 s+ p: O7 U
/ H: X: I; B* t9 \6 k
} |
|