|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!! [2 T' [ b H
这几天我在忙着编一个问题,我用了一种方法编出来!
# `. m* E. b+ s3 ^) c- X但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
3 }( ~4 p: I! ~1 z6 e. ~: U6 b注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
( M2 A% ~2 L* D v- A
! j& q3 n% w$ Z5 L. e6 a! U9 x4 S2 e; n) _! c# ^, ]$ d
题目3 M7 C8 F0 x3 L9 D5 D
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
3 M8 s+ n3 m3 H2 g; r* f' e3 ]' {第一种方法:利用循环链表: b& Y! m- v9 F
#include<stdio.h>
( l: t' w# k; y9 D! _#include<malloc.h>
, e) A4 R) Q P* F; k- }6 B#define M 8 //共有8只猴子
" y- \" A5 f2 ]+ ]) E8 \) P8 @#define N 3 //数到3只时退出第三只
% Y8 x5 r4 \. U& b5 d0 Q" b0 k! `typedef struct monkey
) J9 E% V0 Q4 F% V( T# }' }; u{int number;
8 U2 Z: a: J4 b" ] l9 l+ ~. xint flag;
; \% Y% [( L$ ]; ?' N& L9 J6 Wstruct monkey* next;
* g. C8 D+ X# L, F. z. o; I9 ^}MONKEY;
+ G# p; D( l h3 C" E' `" C' [: G' O; omain()
5 Q# v4 k& q4 ]" }: R0 ~{ MONKEY *head=NULL,*p,*s;2 k/ y- W; `( `
int i,sum=0,count=0;2 }: z. `4 S2 S. x, s! i5 N
clrscr(); //清屏' [+ p4 ~) n3 E1 T9 h
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
$ P5 B: O, f& O& b' D' W, [ p->number=1;p->flag=1;
" C, d N3 Y P p->next=head;3 Z. k( B4 r: W+ b0 g! }4 M
head=p;
$ j: q# F; T3 k! r) ?* M2 j for(i=2;i<=M;i++)$ g- m Z4 E) Y1 N4 ~
{ s=(MONKEY *)malloc(sizeof(MONKEY));. V$ }8 E( b. M' M1 I, ?1 V0 K
s->number=i;s->flag=1;
! r" N1 ]& j0 Z, S2 |3 c s->next=head;( e; }* U8 F1 d) Z+ h
p->next=s;p=p->next;
/ x/ Z5 L! U1 P# o/ B }. O& n; s0 @* b3 B' j
p=head;. M' {# p( U. _# T- G: j# `# s2 s
for(;;)) q# \$ E6 a# p
{if(p->flag==1)
9 j: T1 \# r6 z% W" F& S count++;( y1 V0 ?- c1 o$ S
if(count==N)5 y; e4 q! L" t1 }# m! Y$ b
{p->flag=0;# G/ H0 d p$ N' r9 k* L2 C
count=0;7 v1 M4 [! Q% d
sum++;}: `' k& e! L/ L* w
if(sum==M-1)+ R3 S% E$ t$ A2 ~9 ^% x9 r) t* z' E
break;3 I/ T* k- A- {& S$ I
p=p->next;! \- g" ~6 }" w
}
7 W9 Q W- W. v9 @4 C" N0 m p=) l; r" x/ l, a- J, z/ o: B
head;
; O+ P, l% |. I, x for(i=1;i<=M;i++)1 s) l- x+ L- b7 _' U9 c
{ if(p->flag==1)
$ u8 _( N/ e4 W- @- { printf("\t%d",p->number);" G: s4 p4 T7 L( F4 V0 M" j4 Y
p=p->next;9 V2 a4 ~5 N, s7 ]- X& \
}& `# t6 ?/ _" b0 `0 b
+ Q# b3 q) V5 k$ c2 Z/ C* c+ r! k# G8 [9 Y3 Z
5 l4 Z7 \0 `& g, Z% U/ ~: N V} 0 ^( ?( n8 `5 h, `, E
第二种方法:数组
0 E8 g* C+ r/ o#include<stdio.h>
4 F/ \. p. [5 O/ k3 z+ u#define M 87 b& o% m2 F& u$ F5 h6 i3 x
struct monkey
1 X2 m. r8 i, U+ Q' @4 L" u0 X{int number;: Z9 e: A! Z7 s1 w
int nextp;
9 Z/ X* l" u% i8 B}link[M+1];: j: D2 q4 z) a' O# Y! q F
" M$ c5 K3 I$ p* a8 N& G8 E
void main()4 ]7 Q% M) @) v6 @1 C6 I
{int i,count,h;9 P, E b i! n( {) M. Q! s; Z
for(i=1;i<=M;i++): y8 X6 ]/ D9 U; a4 _
{ if(i==M) E. {5 K% R% Z4 }4 o# z# K" ~* O
link[i].nextp=1;
: v5 l, X$ O' x7 U. r7 v' @ else- O5 Y" g1 o4 G |) `
link[i].nextp=i+1;
9 L( Z* g% q% J$ K% u& p link[i].number=i;
& s) s' @( }( A% P9 D5 ^}& ~, q& L) z8 g$ Y, j% P
printf("\n");
8 s- t0 D. W1 y/ Mcount=0;
& b+ n, E0 B Y1 T$ D& ah=M;6 f9 F+ Z) b) c2 K
printf("依次退出的猴子: \n");; A; U$ W$ U( F
while(count<M-1): H+ {; n, e7 J9 v; A% L
{i=0;. `% R1 W: A. w& D" V! m
while(i!=3)
/ T' A3 @) M( F% {7 |+ `& G0 r{ h=link[h].nextp;
9 V' S/ Y D6 d, G; @+ n* ? if(link[h].number)9 |/ B8 x/ [, g7 a" c
i++;}7 o; E5 Q, c+ L& D$ w
3 C$ V* |+ N; e: S1 K8 L0 O9 @2 zprintf("%4d",link[h].number);/ ?) V( ^) K4 t# b
link[h].number=0;
6 f! s2 e# E* M/ U% ?count++;. Q7 F3 o" Y1 u$ e8 @6 m! S% J
}
+ p! h* d2 o0 r9 o; v+ j* @( x h$ p0 K0 a
printf("\n大王是:");
) e# @% t; l6 f5 H for(i=1;i<=M;i++)5 R) L( M( _3 A; d6 _; y
if(link[i].number)
& ^, a2 f6 K& ]$ J printf("%3d\n",link[i].number);
; n) {9 \( a* Q) `# w0 z
% h# u+ L! h: r1 k8 b7 S) g! Y# y
. t) ~/ d5 J, k6 t2 v/ }}
" D9 q, G% r1 f. O. E2 A7 l第三种是普通方法for循环
8 ]& T. V& f, G }#include<stdio.h>
' f4 q7 Z9 ^: u4 N: Bvoid main()
% I! w( \+ ^7 T* {{ int i,k,m,n,num[50],q,*p;# X% ~$ L }- I- t8 R' [6 ~
clrscr();2 P6 G5 p* ?$ l/ w
printf("input number of person: n=");
( N: x8 N& c- {( S scanf("%d",&n);# ]3 q+ [1 F5 e0 f- ^% G* X1 J! p
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只- s, }# D" I5 o# x6 e/ [
scanf("%d",&q);
+ ?4 H d9 y' {7 O p=num;* z8 {! m5 b6 w+ Y' O
for(i=0;i<n;i++)
& q/ K) a2 i8 y *(p+i)=i+1;
) j# {2 B2 X' Y, }/ K i=0;
# n( D3 M! M/ J3 y9 J. S+ [ k=0;
2 }) A+ I' Y9 L6 p, Q8 b m=0;0 t; {# F4 q9 U8 A0 }* G4 C: ?
while(m<n-1)
. m z( I2 N' S1 V. f: ?3 { {if(*(p+i)!=0) k++;
6 K& G+ p [1 l/ h9 f if(k==q)
! R% S7 Y$ ]3 A) ?+ g { *(p+i)=0;
& a: h9 x, F0 q( T1 I k=0;
, W' T4 @6 O: j: X) v m++;1 Z3 ^$ W1 p# K% M
}5 C, R; |; t7 E1 k N, S1 V X
i++;
& Z% K: }" \8 k+ x) z0 z" v% h6 R if(i==n)i=0;) W. P" J0 ^2 e) |. L" k
}
$ U0 y" k% d" L8 t while(*p==0)p++;
2 G# `; z, [! ~7 m9 W printf("The last one is NO:%d\n",*p);0 |6 r( d! t! s9 t$ Y. M: o. D
getch();5 @" j' s# {- p) q, a
3 ~& j4 Q+ u6 ^0 o3 [: s. k} |
|