|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!9 W$ M, ^, l6 i, G* A
这几天我在忙着编一个问题,我用了一种方法编出来!" Q. l0 u, f9 v# I! W
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!. M! @5 |+ h" t& ~' ^; K) s/ c( O
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 . n3 X5 B9 k, T- x- c% p9 k0 \
5 c0 Q, Q. s+ K6 _0 ^: l& a1 Z/ f" P
题目
" B; e, @" J1 G# E% Y& O1 i山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。: N% e% C3 e+ Q
第一种方法:利用循环链表& W9 h# L# P# g) }$ M9 E& G
#include<stdio.h>
5 L! r3 m" M- U; B( `#include<malloc.h># V& h" q$ w6 [8 p) |9 }
#define M 8 //共有8只猴子
# Z% |' h# q# ^2 p5 T#define N 3 //数到3只时退出第三只0 u3 \- w, D; ~1 c; m4 R+ W/ e
typedef struct monkey( T+ W0 l, v. ]* k0 [9 J r, }
{int number;% V3 ?2 e! ~% z @5 k; b
int flag;- q$ r' S8 z/ G5 ^
struct monkey* next;
8 v: ^9 q/ v; f% p' {' [}MONKEY;* b- a9 D8 a A$ ]$ i& u, s1 _
main()5 `5 b, P' K$ r X. |4 O- U, \9 S7 I
{ MONKEY *head=NULL,*p,*s;" p( `3 V4 A" X2 j6 W( g
int i,sum=0,count=0;
0 ^3 r. V4 o* k7 \% v clrscr(); //清屏
* l9 D$ l/ \, m, z0 Z5 z p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存 D9 i5 \8 s6 C/ |) O
p->number=1;p->flag=1;: D( W( j, L, v2 c# H: _/ {2 E
p->next=head;
T2 l4 E% t' n! l) U head=p;
2 ^7 f- c0 L( } for(i=2;i<=M;i++)
5 q5 T2 W& a7 B& K% e3 ` { s=(MONKEY *)malloc(sizeof(MONKEY));
/ ^0 W; Z/ H9 S! P' j+ b s->number=i;s->flag=1;0 ?8 `, z7 T3 p7 I
s->next=head; N$ j& U4 E( N
p->next=s;p=p->next;! `! ^. e8 t. }* K8 Y( G
}; S. V( f! J/ Y5 \
p=head;0 z# W- @6 @# b( w8 R# Z# Q% B
for(;;)
4 u) D" Z4 Y% ~9 }3 Y! M9 d {if(p->flag==1)0 L ` o" m' f! a
count++;8 Z% j$ A/ b7 v* i6 x& ^3 a
if(count==N)" ]& n/ ]; s% s& G
{p->flag=0;. ^6 u2 r' ~3 ?( H+ C
count=0;0 i) A: c, e F O0 I9 |
sum++;}
1 |) l1 B1 L* X2 @ if(sum==M-1)2 L, z7 R& ^8 `
break;1 j+ u5 z, D0 {# W3 W, g9 ^
p=p->next;/ ~) ]; K- K# B4 P* s; A( G
}
^) |3 O; {, F0 ` Z; K! D p=
) L1 H1 X" M7 q5 e& y. O! H3 _# L head;. e7 j# d- T! b! U* V# y
for(i=1;i<=M;i++)
3 f" b2 y0 T! ~/ R9 }9 u { if(p->flag==1)) ]/ O5 B+ i v! Y; j+ j+ h9 B
printf("\t%d",p->number);* J# t* z$ n8 ^! `6 ~5 k7 A, [( E" O" c
p=p->next;
5 p7 e3 {! K% [8 \+ w }
# ]2 l) B8 d5 g. D& U) ~6 p
6 w& C S% D8 D8 `% g6 R8 L" J! @5 ^" N
3 x8 H; a3 k$ C' i2 B; j
}
# e) }, y0 ^2 D$ i第二种方法:数组
/ b: v% Z* R' |( C#include<stdio.h>
4 u* h4 A, A1 i1 w/ e#define M 8
0 h$ F3 s& q8 t/ u" Bstruct monkey
- L$ j* U, J! h5 @: ?% E{int number;
9 y/ U. S/ a6 ^int nextp;
0 i+ F: N H: C; D, S! \* h, E! j7 s}link[M+1];
8 F) C# t% a2 x. n% \7 m
' g# _8 K+ x* |# v }* l6 D$ tvoid main(), K% i# ^/ }4 [' b
{int i,count,h;2 j; N3 l3 Y3 z9 |# n
for(i=1;i<=M;i++)
/ h4 H6 |6 S' \* I( i* X{ if(i==M)
# l- v! F& g) N. L4 [ link[i].nextp=1;4 @9 h% E9 d+ R }) H: @
else* Z9 L$ |1 F* z( E* K- @
link[i].nextp=i+1;: `4 j( d) f! d' D3 T6 @4 L
link[i].number=i;6 K; i) u3 D2 Y' z- e* A
}$ N. r( O. o$ G7 ?% S* P Q( \) ~2 I
printf("\n");# x& V) D! f8 A+ Y
count=0;& D$ h! O7 d6 z, a Z) y+ c
h=M;
& A* \- E: K1 C! u* u. ^printf("依次退出的猴子: \n");
8 ]& [( l( Z: r! q L! i% K( J9 p, {while(count<M-1)
4 y0 _' {. X, f5 W( \ X{i=0;
6 T0 O3 o0 g( X7 t8 J ^6 Awhile(i!=3)5 q4 Y. V- [- s; Q$ G4 `
{ h=link[h].nextp;
- i; J `" q! c0 Q- @+ S7 }4 o if(link[h].number): k6 L5 I* p l( ]$ r# a* G1 g# h+ y
i++;}: S& }$ @3 ]7 U
/ P7 O2 u# N, ?( O; o/ X, e
printf("%4d",link[h].number);
$ S$ d4 q/ U3 z: d# ulink[h].number=0;
& |9 T0 _& Y- g, ]count++;
6 x$ v' V, f) g U9 G}- y6 v7 T' \; }$ x
+ {" X- B0 s# i- {6 \" X- _9 tprintf("\n大王是:");: B% X# W- x+ f3 O" ~6 S5 `
for(i=1;i<=M;i++)
- K1 V5 `: j( o0 u. ]( u: { if(link[i].number)
. ~+ Q; T! H4 c. |( S printf("%3d\n",link[i].number);7 d0 ]' F+ E, s
) {# z! m+ ~ b
/ S1 N9 Y( n& J} 1 C5 k5 c6 K1 c- |6 m( s5 J
第三种是普通方法for循环
/ E- V" x3 e6 [3 i! K#include<stdio.h>
& n. q. g$ d- Xvoid main()
* E4 \: J8 w9 z4 P8 Y" H{ int i,k,m,n,num[50],q,*p;# X" H# x8 E# J5 o" D; Y
clrscr();4 E* N( j# m9 B5 |) r: n ]2 |
printf("input number of person: n=");2 n. m, ]3 o+ M4 z6 R8 ^+ a9 g9 {
scanf("%d",&n);# }0 a" n7 m8 N! A/ m
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只4 g3 h" z$ I; U! |6 d
scanf("%d",&q);' ~' |9 k$ g4 Z
p=num;
& M# Y% g& J7 @. M' E for(i=0;i<n;i++)
" u) j+ }9 a) u *(p+i)=i+1;
0 `; d3 v: H6 h- |: X8 F# I/ b$ w i=0;
4 _& z% k' q, O) i k=0;
+ S# l1 O& ]- x6 I2 f m=0;( R' B( E8 r- O: c) g' y
while(m<n-1)( }& a2 Q$ B8 x" S# c8 R
{if(*(p+i)!=0) k++;
2 L; K/ V% E' m" D, R( T ? if(k==q)0 N+ y+ A# y+ c
{ *(p+i)=0;# o2 O% U+ {9 G
k=0; ?' H! ~+ t7 a; X/ K! s7 Z5 w
m++;7 V' j9 F4 N* a& @$ G
}. U8 H, G2 a0 V# X. I1 C1 i- X
i++;( D1 S/ e# o3 v
if(i==n)i=0;9 X7 d1 D- R% j* S5 `
}
% x6 q, i9 {2 [9 w7 W9 l while(*p==0)p++;
" c" g" ^) M0 k; s printf("The last one is NO:%d\n",*p);
* j) B( b- T4 [3 V B getch();
' i, m6 h- ^2 j0 O; ?1 A% v( U7 m6 S1 H9 n/ |% f) r7 E
} |
|