|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!) |8 h9 n+ X Q. M/ L$ ^% m
这几天我在忙着编一个问题,我用了一种方法编出来!
. Y/ n( v: L5 p8 }3 k/ a但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!8 D& k) K C& V
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 & H$ c% k' K! _2 ~+ L
( W5 I( B, O6 G, i* o! l3 L/ F2 P2 ~( u; u
题目4 p& q: J5 f, I' C% k
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。% _& H: ? P) M+ F
第一种方法:利用循环链表
5 r8 K! k& p# u3 O7 {1 Y/ g#include<stdio.h>
( L( J! L( [4 W+ j8 q' `#include<malloc.h>0 Z' }, X; L' n
#define M 8 //共有8只猴子/ M, x* [5 x3 \+ |0 }' o: Y
#define N 3 //数到3只时退出第三只
4 u6 O# T. S$ c" o Q; Itypedef struct monkey( k1 j( W. D, c( y
{int number;
5 U; C: @6 H5 T+ P% h5 W `+ `* Dint flag;5 ^( n' f: B2 n2 p+ [/ ~, Y
struct monkey* next;6 @4 \% }4 c: l; \) @2 q
}MONKEY;
3 h1 W9 X* C# j/ Wmain()9 ?, O& P" X* E! f2 A
{ MONKEY *head=NULL,*p,*s;5 f6 ]& b I: m) N0 }$ L
int i,sum=0,count=0;: `5 f C+ v8 V2 z* A/ e7 E5 \7 S
clrscr(); //清屏
; _% H5 F# E/ }* e p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存5 D' i- [0 l o+ d% z$ O7 [
p->number=1;p->flag=1;
2 x, S7 c! m9 O$ L& s: B. `& i p->next=head;: g/ A* [* `: c9 |, U
head=p;
7 h0 S" V/ E# v0 L+ ~: V! H. g8 _ for(i=2;i<=M;i++)
( l5 x6 v5 K8 N$ d% i9 | { s=(MONKEY *)malloc(sizeof(MONKEY));" J( I! u0 C) V2 p; K+ Q
s->number=i;s->flag=1;& F/ P! G$ r# Y. U y# w+ v t# R
s->next=head;' q% v* E! |9 ]" d# y
p->next=s;p=p->next;) I; D { L# Y( V1 @* R
}! J# p9 I( [' p
p=head;: L* [) w# S* H+ P4 x# C
for(;;)8 s& i2 W) q; H1 x" w# s
{if(p->flag==1)
# ~* R2 |( ^# ] count++;
$ O' E) S6 S: l% }6 V" G if(count==N)
* ?* U0 U/ |# p6 Y {p->flag=0;6 I- @7 R6 q# M. Y* f
count=0;' u7 [3 g, C/ ]3 d$ k; R4 O
sum++;}
& O% @6 [ @) m6 ~ t, y7 M if(sum==M-1)+ Y5 @% b V4 L5 p& O, B
break;
" B/ b+ t5 ?0 {! d4 n1 \1 x; F p=p->next;. S. l5 v6 h- d9 x
}3 j H' j. ~# C- V- [' m3 p+ O2 u
p=
6 x1 U P$ K6 |- @+ e1 } head;2 B9 m8 u# P# j$ g+ k9 S
for(i=1;i<=M;i++)7 t' q& T( \0 O! n9 W! h) G
{ if(p->flag==1)7 T% W4 t. f% B. O7 Y! w) ~% C
printf("\t%d",p->number);8 k ?% m- ]4 C, {: N2 N; n
p=p->next;
" H% ~# h8 e; k' j' k, m# b }
8 n. h4 G ]( h: @) V
+ i% V3 j s. H; H2 F4 a# Q0 I* F' x" D! |: I' o
: U8 k0 Y* ?$ P5 T" h' Z# P9 l
} 7 p, A2 l& P# T) W7 H
第二种方法:数组; q. D6 V/ y |4 A- E7 C
#include<stdio.h>' B) t C! ]& L
#define M 8
/ ]/ j5 ^" s! \struct monkey
7 K. A3 h3 C+ ]* @{int number;
0 L$ Q, q0 l$ dint nextp;
) g) D, S* E- x7 {( e% l/ x}link[M+1];8 _' X/ R2 w J; B& M5 R
0 O4 \( k/ r: b8 v( j$ |void main()1 M/ K( B- V$ u: v1 x: M( A1 ^
{int i,count,h;3 Q( `2 C1 x% D% l$ e4 D* d( @2 w
for(i=1;i<=M;i++)
8 z6 O+ k; g4 }2 H, F{ if(i==M)
. E2 z0 [5 [. o7 { link[i].nextp=1;
6 `+ Q$ k: u, \. D, `5 n8 n) v else: ^+ G2 c! e( c1 i3 x9 T, w; j
link[i].nextp=i+1;
2 Z7 \3 B# F- `" l9 _ link[i].number=i;' O, T# k+ a, {
}
; ?: N R" I8 @/ |+ G5 qprintf("\n");/ _7 D3 O/ m$ A
count=0;
$ @7 \0 A& K/ d6 u1 qh=M;
0 k7 z9 b& ?" y* N% e6 bprintf("依次退出的猴子: \n");, b4 M; x* [% q
while(count<M-1)
+ g" \$ T* X. o0 k% H A- V{i=0;0 `0 s' d5 D. r, P
while(i!=3)3 I) i3 Y5 d, ^5 i5 V( h+ i; S! T" Q
{ h=link[h].nextp;/ o; j% r& b8 p, W8 t3 t6 H
if(link[h].number)4 }+ J' I4 Z6 X2 C! c& p
i++;}0 u" P& I4 b+ s+ ^1 ~" ]! @ h
- T0 W0 T0 x& v4 P- Aprintf("%4d",link[h].number);5 z* J7 M X* `) j4 D9 }
link[h].number=0;" s2 _* o1 {$ w C* j2 S' P
count++;
% ^' B% w3 l4 w3 W* ]; `/ b7 }. j}# d) c. T8 ? C% {4 r+ \& S1 Q- R, n
4 P. H# D. ?; }+ ~: Z1 [+ |printf("\n大王是:");+ J5 }9 ]( B5 v
for(i=1;i<=M;i++)) ~) c/ Q' v I4 J* {3 a
if(link[i].number)1 E7 g3 ^7 n O! r! r( g
printf("%3d\n",link[i].number);. j0 B w9 G/ s* O1 P
" w* I9 Z H: O9 R7 k$ y9 P' v
# X" Y/ r% S9 W}
* ~* v m) K/ Z4 p: X- C第三种是普通方法for循环
( b7 J% L+ [# J3 z2 S" [! }#include<stdio.h>/ u9 R+ F5 m: U9 P! B0 ?! Q; Y
void main()
9 k5 K2 J( X/ x% Z1 m4 ?{ int i,k,m,n,num[50],q,*p;
' {5 v7 {2 O/ S: k, C! z, s clrscr();
/ M0 C. |& C7 A2 | y k# o& p2 @ printf("input number of person: n=");
) l) r8 Q+ x5 [5 K0 Z4 N scanf("%d",&n);1 d$ K6 [& m7 n
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只% d( D C; j0 m b* H+ Z4 w
scanf("%d",&q);
9 I( U" e9 O# s% { p=num;4 L1 ~3 k$ u9 \- H7 Y0 w
for(i=0;i<n;i++)$ O; e$ |# v B$ \# o
*(p+i)=i+1;- z5 Y: n" d0 s: G2 e8 V/ w. K
i=0;
" S7 S; T( u5 c k=0;' ]5 [! P+ H8 E) O/ V
m=0;1 }# q9 G3 o: G/ Q3 M
while(m<n-1); \& a/ @0 @; r0 f$ f* z9 u
{if(*(p+i)!=0) k++;
$ B* M" F [" x i if(k==q)
5 Z( L/ L! x. M, D { *(p+i)=0;4 X- v* X- Q8 `% m. E5 \+ b/ q% X
k=0;( x& k1 t4 e( ?2 Q
m++;
8 H/ x [8 O4 R) f }: j& I, s1 [" `- M
i++;
! d/ F# V# `# G4 T0 E; G( D if(i==n)i=0;
) ?. _. r5 }; b# F }$ ?# A5 e" q1 F. C" W
while(*p==0)p++;% Z7 g4 i) x4 R# K% D3 p5 |9 N
printf("The last one is NO:%d\n",*p);
{' r q4 H* {; F- z* [ getch(); c K7 E8 l) c j" F b5 P1 k
5 t! Q8 c0 y1 p9 b} |
|