|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!0 t: C$ y6 v! Z
这几天我在忙着编一个问题,我用了一种方法编出来!
: A9 z% \" v5 @0 T但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!' K( a9 i' z3 ~+ `% c( T5 x0 O
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 ' Q; @8 J6 S# _
# n9 z& m& q) c' v+ ?
: W/ k, [- H; w7 h0 B
题目. B; U: e- |2 j2 N& ?! b+ B
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。# P0 T- s% e, _! c6 B
第一种方法:利用循环链表
3 h) D X* h+ G9 ?#include<stdio.h>
" B( L( s8 h& p! r+ I#include<malloc.h>4 W+ e$ \6 k7 F6 c) l% ]
#define M 8 //共有8只猴子
+ `' l! F0 `! S0 u8 x# m5 R. [#define N 3 //数到3只时退出第三只
2 x4 G* t# ]7 z6 t1 Qtypedef struct monkey6 J: B6 i: o1 E/ X
{int number;
; S5 E' f& f7 d4 w, B: g( q$ s" I5 [int flag;
: X/ j3 U7 Y2 Y# V6 T: ^, @/ vstruct monkey* next;7 U2 L: D+ M( I6 V
}MONKEY;
1 ]8 X7 ^& K, b. ?( d' Ymain()
. ]! i" o8 a7 K9 c# |{ MONKEY *head=NULL,*p,*s;: r& k3 C: Q+ c N/ `
int i,sum=0,count=0;; v _' |: c9 W& z& x
clrscr(); //清屏
( D0 x; e8 f7 ?$ Y% c$ v7 {, ]. u) m p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
6 b8 w* h! Q, r p->number=1;p->flag=1;, g2 H' Z$ E* ]/ C
p->next=head;
; G" U6 u# l0 z( [ head=p;
' j# q+ ]& d7 X. m0 _ for(i=2;i<=M;i++)
# ]# M5 s$ L4 h+ L { s=(MONKEY *)malloc(sizeof(MONKEY));
2 ~& E8 q! ^) F4 K& X s->number=i;s->flag=1;" K5 F4 d1 N4 @+ w. k8 {0 H' {
s->next=head;
% {1 c; X1 y5 g+ Q# X p->next=s;p=p->next;
) \) N/ f$ a( Q: k$ {4 W9 f9 k }( \9 H0 U8 H# s( j
p=head;) `. E3 I9 P Q
for(;;), @5 `! l$ e& s) {* A/ D& Y) ` p
{if(p->flag==1)
% `& F) B3 j% i7 {$ ~4 y, | count++;
# m: K0 v2 i5 H9 B4 Y( l7 D1 p8 B if(count==N)' P9 H$ _0 J2 J+ l- |4 O7 K
{p->flag=0;1 f5 x& ^6 W( v% s4 U, B3 N1 D U
count=0;6 ]# b u% Y6 P+ R; F% f6 A$ P
sum++;}* a! t$ M% n- N7 }. O
if(sum==M-1)
% y, [% I* ~1 t$ A* N( P! ^ break;
! o6 ^5 p) D5 S. h1 i, z$ M p=p->next;
7 @0 ^$ S( P9 V! O }% f( R: y/ s% O w) o6 Y# ]
p=
2 l* d, T* T& d# a head;
) |; e6 ]" n8 H# g5 y5 C for(i=1;i<=M;i++)2 b; i) b3 V7 Y2 ^' O5 `0 t2 {
{ if(p->flag==1)4 D# _6 D$ ~5 @" l8 Y7 e
printf("\t%d",p->number);! F+ n, z: |) q. c- A
p=p->next;
% T8 P; ~9 S9 X& ]8 G+ k# ^' M" Q }
7 i* S5 h) y4 X& x# c& C% k) F9 U* r$ p& G+ K0 E, L! [. r
, x% C* w& g# W$ v. l7 a" W8 l8 ?+ z
} + `4 k7 |' U% b7 o" U
第二种方法:数组) M, J# W- T( e: o9 O4 f
#include<stdio.h>
( Y z0 S" p; d4 L#define M 8
+ G6 U7 f/ ?' H" N' nstruct monkey
4 q( b- J' M- j, ?; y{int number;
: x2 a9 p% }- r. v8 b5 |. M1 Rint nextp;
1 n7 C! P3 L {, m}link[M+1];% j& h: K" w i0 U8 G
% |3 Y+ f+ W7 t0 a, zvoid main()
! X- t: v1 G0 ^# O5 t8 D* r" T{int i,count,h;
0 V: B% e- r6 I$ Ofor(i=1;i<=M;i++)
5 y( N! N# O U( x7 Z- W2 V( ?# Z{ if(i==M)4 C4 O. g2 Y, O9 W* p
link[i].nextp=1;
- J8 }- V) o! H" X else; Q" s, i$ W- {. S
link[i].nextp=i+1;1 N- U9 G7 l1 b
link[i].number=i;
. y: v, O W- M0 B2 a V}
; z# `$ P) T0 k8 t9 {3 vprintf("\n");% w4 v1 r1 s$ U& r3 J* h0 U
count=0;! @# W2 I4 F( }+ `
h=M;7 n& k; r5 {/ \+ q
printf("依次退出的猴子: \n"); s$ L" t$ g; p6 l2 \0 _2 U0 j
while(count<M-1)
" W% ]% N, L- }3 j& d! V" o{i=0;- x0 W/ z. R3 B4 {/ h8 D
while(i!=3)0 S- _* c& G3 Q. n" `
{ h=link[h].nextp;4 n+ Q- Z+ J6 B# n5 T. z$ L3 `
if(link[h].number)
0 L, H2 M6 K3 f: e i++;}
! y6 M9 {% r& W: d* O" L. m& i# k# |; `4 v* X) E- U# }& d
printf("%4d",link[h].number);
: |+ w3 F1 V, rlink[h].number=0;% r+ q! ?" P- _6 F7 _
count++;
5 V8 s, d9 ~' `}
# H: l' p& q2 J. R C" ~& J. D6 U: s
printf("\n大王是:");
( e/ {" Y3 ?# V' E" H# D; G for(i=1;i<=M;i++): H0 @, e1 r& Q* Q6 g0 B
if(link[i].number)# i- ?3 O. {- z6 i4 {; j5 J
printf("%3d\n",link[i].number);7 z$ T# W- [' Y" H
6 X9 R6 b; b& a; s p" x) u5 Z n) ]9 x( ^
} + U7 e5 }7 H! F i
第三种是普通方法for循环) [0 S1 c* Z9 ^ W( c# W) j
#include<stdio.h>
; ~; D+ U0 w, A a8 V# {# Ovoid main()
, ]- c8 [1 M! T( h{ int i,k,m,n,num[50],q,*p;
" A; e& r; Z6 }( I! S" e1 q clrscr();
- } ^2 ?. s# D* p& n printf("input number of person: n=");
5 V6 H5 h+ D: |4 K7 V scanf("%d",&n);
( c$ y6 @( ?: p6 Z3 T+ W* l4 eprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只1 \' h( w, E" H; F3 U/ h1 _
scanf("%d",&q);
# z- _8 y" Q% h6 S5 [ p=num;5 s* j4 V. ?' S
for(i=0;i<n;i++)5 ]9 h5 \# ~! I
*(p+i)=i+1;1 \, L$ j0 y* Y! F* Y
i=0;
* |2 R. w3 j( b k=0;
' [+ p- s7 B+ J0 f# F3 Q: \ m=0;
- s( W7 W5 H) l4 C9 h& U: L2 ` while(m<n-1)
; U9 P" @. E+ L/ D; g {if(*(p+i)!=0) k++;: M* i" ?" v; T1 F
if(k==q)
' m% n: l9 `( q- c* t4 w { *(p+i)=0;
7 Z( k( N8 _0 Z) l k=0;
. g% N: @* _( f$ A" n8 j m++;; q8 f+ F+ b' t& I7 L* D
}9 e w# b( h9 [6 X- |
i++;( L$ u9 O, q# L) j$ H5 @- C
if(i==n)i=0;. ]$ t2 V* r2 i$ g
}
$ \) t8 N* \' M+ i2 i while(*p==0)p++;2 d9 h3 r) L! }3 G
printf("The last one is NO:%d\n",*p);0 @% Q+ J q1 U9 I, J2 H0 X) f; y
getch();
* F; y$ q4 N* U) B; k2 g: s. X
* |, }+ A$ \+ l. g4 z- R2 v; y} |
|