|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!5 q# U2 O( p. {& m4 ?8 T4 J* m; y
这几天我在忙着编一个问题,我用了一种方法编出来!/ s* U O; B4 S: U- {# ^
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!( q N0 z2 s. u y5 ?" Z
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 % ]$ c$ u9 g- K$ @
, J; q! T1 I* f( j7 Q: a& i+ U1 H. E% n
题目: y- }. j( G" i, T9 l" ?9 v3 F
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。+ t6 \' I4 D+ X- x( n+ b; _
第一种方法:利用循环链表 h2 c/ n; G" Y L! E
#include<stdio.h>
7 H' L# B* i3 Y" F7 O- ~#include<malloc.h>
- y d1 V/ L5 r3 o3 Q+ N#define M 8 //共有8只猴子* H- ?* g9 u& T; @9 z L# q
#define N 3 //数到3只时退出第三只
; b4 j8 G+ _3 X$ ^" Itypedef struct monkey9 j' h$ n% K8 y% `/ X
{int number;
6 y ?; B" ^5 a. F O. ~6 f0 m' Mint flag;1 g1 q0 J2 U! w+ Q# `4 f- r
struct monkey* next;
" ?! J* h. P8 o}MONKEY;
( g+ x$ b' }7 A7 _main()
& |" |& F! }& O# I8 g{ MONKEY *head=NULL,*p,*s;
: n2 k) |9 X, D6 q# t* ~ int i,sum=0,count=0;8 B( ` G: G9 i0 {2 _0 R
clrscr(); //清屏- ]# R0 m+ Y1 b( E4 t3 i
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存* s' b* y9 Y9 a5 N
p->number=1;p->flag=1;
# a* C! f+ A3 m p->next=head;
1 ~- @( K1 L5 i) r head=p;
) V! n; p; ^$ G- N. @. t for(i=2;i<=M;i++)9 C$ j% Y( [, x- ]
{ s=(MONKEY *)malloc(sizeof(MONKEY));
; F$ G! K; r! v* e) a$ B0 ? s->number=i;s->flag=1;( A; q7 D) n7 _1 \
s->next=head;
, E/ v& J# P. a% G- }/ C# Q& S p->next=s;p=p->next;% _4 W9 w$ w7 A: _
}8 a5 z7 |$ B2 D# s
p=head;
% r, T" M. d" g$ N2 R for(;;)
' x# b* n W; @! r {if(p->flag==1)
* _; ^) B+ x: U0 D B5 e$ x" E. c count++;
7 J) Z" `! h& N3 n. ~ if(count==N)
& G! ?6 l. _ {- z- K$ ~ {p->flag=0;( K2 n- Y& W2 H3 E5 p
count=0;
@' g) ~3 u$ C. N' { sum++;}% W+ V) D! f7 I
if(sum==M-1)
& X7 Q: m% F* s/ \" D2 l break;
. [: o( t" ?8 z6 r( T" h/ ? p=p->next;8 M( m7 D. F. q. ~0 i6 ]
}
3 ]+ O2 f7 f5 p* T0 }/ M* Y p=3 f5 @% x+ d7 H9 E2 O/ `
head;
! d* O: [! M0 T3 }3 n2 p! p for(i=1;i<=M;i++)
1 r' }; b# m. R8 N% ~; Z; d { if(p->flag==1)6 d' K+ s2 G) M/ ^" | j
printf("\t%d",p->number);1 ^. W3 A, w( E) z! h/ }
p=p->next;
" p& L/ z* l) N( ]# a }7 C1 E5 J( H" y8 Z2 _& |, O% \4 y5 {
7 ^ l7 [, F" P) i- U3 Q' t- V. e4 x
, B) `$ ^0 l3 P$ \( Q/ w& v8 M} ( t, O" ~+ q6 \4 I2 q
第二种方法:数组) p# K- j7 B& }) `) i
#include<stdio.h>; N% c/ r1 {% h; \- [" a( |
#define M 8
$ k1 ?9 ~2 Q2 O. Xstruct monkey
; x+ W$ x) Y) P j1 R L9 f{int number;
8 k/ W" G' s: a# `+ I- Aint nextp;
: B% T' T% k! ~# d/ [/ e7 t}link[M+1];
1 B! }- ^+ _& H6 R
3 b$ q, j: Y, Z- B# Q4 ]void main()
7 n% v$ H1 L+ f) |1 {{int i,count,h;& I( H7 x+ m' Y- y$ J/ U. T
for(i=1;i<=M;i++)
( a7 [( G' J- k5 I{ if(i==M)* ]! o8 q6 x: O3 f2 y# z
link[i].nextp=1;
$ V7 d1 Z# e3 j4 s; w0 j& v. K else2 d% E1 M2 }) T/ @4 F% q0 j3 g% o
link[i].nextp=i+1;+ C3 i% O3 {5 t) B( m' D
link[i].number=i;
5 Z- R" Y* s2 o+ K+ u! K; u2 P7 \! R6 D}
( |6 t U( w. Q9 k5 Aprintf("\n");
@9 y5 m; C) r' l% Lcount=0;' k! g9 K; c4 `5 Y( F% z5 }
h=M;
0 L% N, M0 ?) F6 H8 Kprintf("依次退出的猴子: \n");" m1 O, j2 |$ k [, [) D
while(count<M-1)6 ?% ^& ]3 x2 {/ m U
{i=0;5 h6 S1 C4 t4 ]
while(i!=3)
0 Y' u) q H8 w& k. K{ h=link[h].nextp;
, }; V7 G& L$ W if(link[h].number)4 [6 o4 Y7 R& M. ~4 i
i++;}
: J H8 i8 D+ A- A( U5 ?3 X% N1 \3 f% ^0 ^. i/ Z4 y( G( b0 T
printf("%4d",link[h].number);
8 l5 L; \1 d- y8 P4 F- Ylink[h].number=0;! U/ h1 }# V3 r* @8 Y
count++;5 ~* J0 |: w& d+ t* g* a! l
}" N4 ]% q% W, Z% c U: q
& ^9 ]& ?' ~/ w1 v# `( f
printf("\n大王是:");
8 m- x, D& @* x) ^* g5 t+ X: b& q- P9 q for(i=1;i<=M;i++)
. l1 o/ R8 u0 E6 T( t" w, h& P if(link[i].number)
+ @$ q7 t# e8 |) c printf("%3d\n",link[i].number);
* K7 n8 K9 M" C' r3 }6 g5 U0 @0 S5 ~6 n, G! ~, n1 N/ e
6 n, q9 q0 |* i2 f
}
( J/ T, w- A$ m& g7 t: a第三种是普通方法for循环( L9 m/ w q! C: n
#include<stdio.h>
4 Y7 H8 f9 T2 @( Vvoid main()& U; A7 Q Y0 E5 f. z
{ int i,k,m,n,num[50],q,*p;9 J' r8 G# l9 R. z
clrscr();
) c/ Q4 d& d7 G! i! p' f- t* M printf("input number of person: n=");" W `& e2 X" @7 A" o1 y' q5 ~% P
scanf("%d",&n);
8 @' I$ ?( s. r- t! ]( Wprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
$ H4 }0 T! y: n' v4 s6 N- J scanf("%d",&q);
/ G1 ~5 ~8 N6 I, [ p=num;
2 t: H1 J- L, A! b! O for(i=0;i<n;i++)( k1 F" o1 J5 } [" h
*(p+i)=i+1;& o" F4 e$ C D8 y
i=0;
* P7 {2 K/ W& k# A$ @1 @6 u5 @ k=0;
! P2 W- k9 r5 d( T. P m=0;; Z& Z Y: o( I- S' G
while(m<n-1)1 N/ N X, s: _4 K4 G5 I5 w5 f
{if(*(p+i)!=0) k++;
- J4 K+ }. `4 i. J& ?2 h if(k==q)
5 @; a" W9 r; Q { *(p+i)=0;
* F8 d/ u6 m! x6 Q k=0;4 p. `, I2 i% k2 v4 T! D
m++;
4 Q8 M. Q; s0 z% u; a }
+ `; c& ~# u7 ]8 v8 _ i++;$ ^0 @8 e( S" ]" ^
if(i==n)i=0;2 k. }! E8 c& `2 ?/ \
}! l. L1 @/ g: Q1 z ^9 m/ J
while(*p==0)p++;
% ]& H9 W: G- |! L k4 [ printf("The last one is NO:%d\n",*p);
+ g5 w; y3 Y* F+ q) r6 f getch();/ a$ N( z5 _2 s. b! p# @
! ]9 B' C6 y: k- E# [} |
|