|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!( y$ o2 R+ x* m2 A; t$ W' t) U! G
这几天我在忙着编一个问题,我用了一种方法编出来!, j7 O. M0 @* t+ G8 t" o B* E# k5 P% [
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!' B6 L( j$ o- B. d8 x2 G
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
2 Q5 b( {2 T2 g% O1 `1 a/ P8 O" ?$ L1 ~7 v4 S. O
) V( J7 @, t7 \ Y: H 题目+ [! T. g, z5 I) ~4 o
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。7 |. Y6 d# M% k. B$ H3 n
第一种方法:利用循环链表
& r' F: r& u9 u* V3 Q#include<stdio.h>5 l& O k9 C4 J+ D
#include<malloc.h>! w6 M% P( ?' U% x' t
#define M 8 //共有8只猴子* T' i, z8 G, V3 n+ N( r o
#define N 3 //数到3只时退出第三只6 r4 r a. E, |+ R; W# B5 K
typedef struct monkey" h7 r! o4 Z7 H4 R0 K% ^
{int number;
: p# w& K Q0 c+ p. A$ \int flag;) Q! i0 q$ k' D: } x
struct monkey* next;' |: v8 Q& | i* ~1 p( A
}MONKEY;$ F+ j) w$ f( o( U
main()% e( c4 J- l, I
{ MONKEY *head=NULL,*p,*s;( y, D. `! r4 `" @. y
int i,sum=0,count=0;
% l; I" F/ x" N9 \$ g$ p! [. [ clrscr(); //清屏
5 d9 A# G% Y; G+ j2 g5 V/ F) i; K& K p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
* w& O' Z3 y) O& u! U) r6 Q. B2 D$ E p->number=1;p->flag=1;. d; i3 Y& ]4 J, o" W
p->next=head;+ m/ C1 ^- k N/ x# t( b, q
head=p;
" h1 C, n5 x/ r+ u3 a for(i=2;i<=M;i++)5 T% u$ ] _ d2 L* t6 D% ?3 R
{ s=(MONKEY *)malloc(sizeof(MONKEY));" A' V( L; r- ^' ^7 ]
s->number=i;s->flag=1;
) r- a$ P+ t1 r6 o s->next=head;- @ F$ g9 y& P# Q# h6 g) n
p->next=s;p=p->next;/ G& ]+ O. c3 K
} y0 k6 r& T ]& u
p=head;
9 X4 J1 C, U# H( T3 E& f for(;;)( o4 j% v- A) g) L3 T+ H% i$ q
{if(p->flag==1), \1 h5 @& B: p
count++;
7 S P, k! V" L if(count==N)" ~2 E0 V4 c' A* J
{p->flag=0;9 U+ ?/ u% c8 U
count=0;
. I# `. T/ M e8 Q2 O sum++;}, [# h4 l2 h) Z3 n8 F. p2 G$ S- U
if(sum==M-1)8 K4 k7 v4 p9 H
break;
0 i( m/ y) u. C1 r; R3 Z& q p=p->next;
3 J, H& }7 `, D( t; X }
w& E, {! s7 m+ x p=; n, s' R* z0 f: W/ E G! y' j
head;
4 |( u4 \. T8 e for(i=1;i<=M;i++)
2 X8 B5 p2 _6 W J# ?9 f { if(p->flag==1)' J3 d; Z/ v$ a4 Z# ]
printf("\t%d",p->number);
7 s0 [1 `. h g- `% ? p=p->next;
* G5 D! B0 ?: l" A2 M& j }9 A5 c' H8 Y) [$ B
9 T3 U7 ?3 r, G4 h) E* V
- i( ]3 u. n, b2 |5 D& k( g# x2 Z9 a" ?1 Y6 s1 m+ U
}
; k8 H |0 R9 S第二种方法:数组: B' f# s- j3 ^6 x" J6 E7 M
#include<stdio.h>0 D8 X8 h0 y# P4 F, @! @ o2 c- O; m
#define M 8
" U! b8 f' `2 O' c6 v( B$ Xstruct monkey0 z+ g' Z4 {& ]) _& ~5 b" `
{int number;6 {$ l% P6 P5 U$ w& g" `" b
int nextp;
3 a0 Y# w `. x( x1 a/ U6 y}link[M+1];
: D( M: K) |7 ^3 g9 U. [7 I& W8 _( d y6 d# ]
void main()
4 U- A$ W; L! n; x8 R; Q{int i,count,h;
# J' S4 x) R) V: _2 Kfor(i=1;i<=M;i++)
, L* q O& Y$ G( T3 E{ if(i==M)
! w, `! t5 u% o$ K/ F3 D/ |' M6 F0 B link[i].nextp=1;* g. A# F+ ~- P
else
* B2 x. L- H& X& C9 @) K- i% O link[i].nextp=i+1;
- F2 {$ W" d+ l7 L& {% l' M link[i].number=i;& x0 K. t# |! c. S" Z
}* c* d, _* t; W& j, S
printf("\n");. } @# ?7 Z8 N
count=0;) ^! I! l3 n, Y; {2 y' v* _
h=M;
4 k# I g0 Y" E- P9 E1 O$ }printf("依次退出的猴子: \n");# o6 U8 B2 s5 Y% t/ Q2 ^9 T! ~
while(count<M-1)
( A5 E1 c; g/ @{i=0;% a! [2 c7 D' [" z/ w& a% A' Z
while(i!=3), ? V% X; R, [' k h
{ h=link[h].nextp;
: }4 J! D3 @" w- z T if(link[h].number)
6 j9 O2 b T1 R4 j) ]& p i++;}2 J: l$ i2 g; s1 E0 v6 a9 [
- [3 `& J$ B! Z5 S6 b* e' e) ]1 }printf("%4d",link[h].number);$ Z# [1 n x l0 V% F" ~5 g
link[h].number=0;
- T7 f' p) e: z+ Mcount++;0 Y1 }% L; ]# W) a
}8 J5 n$ R& W" S. W/ Q( _$ ~) D% y
0 Z3 I, k6 k$ A
printf("\n大王是:");9 [% q5 g, z( |
for(i=1;i<=M;i++)& N/ F- K3 o' ~; |+ M( |9 A
if(link[i].number)2 m, m$ G' u2 k
printf("%3d\n",link[i].number);' _: I" t7 j2 ~
, x* I. x% R: S
4 t& v! c1 G, _& X+ G5 y1 J} 8 U) e9 C" E( D
第三种是普通方法for循环- r1 W$ ]4 P% ~/ r I
#include<stdio.h>) j; p, b F% [5 L# a
void main()
9 l0 f, x0 E+ `' j; b- z" t$ M' l{ int i,k,m,n,num[50],q,*p;
1 H% P Z. f) p+ `1 R$ l3 m clrscr();
0 j2 W4 S! x) l8 G \5 `" [ printf("input number of person: n=");
. [4 D' y; B- r( Q) w" R" e" k& X scanf("%d",&n);$ E, u/ ?3 b7 G7 p
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
9 d" l+ O& l' u* A3 d scanf("%d",&q);
$ g! \% P2 M7 N3 v2 K) ^ p=num;
5 y; L# x( Z- S- d/ Y for(i=0;i<n;i++)" K% P& h9 x4 h/ k3 }7 K2 I9 K
*(p+i)=i+1;
' C# p* l( Q' p5 L: y8 e" p5 x* t i=0;
" t. g2 a1 k6 ]- F) P4 D1 k k=0;
8 n2 ^: H- x& h' K8 J m=0;
+ J* q2 W- v$ Z* m while(m<n-1)6 G1 K! W3 f2 R' }2 s$ b' g$ e7 \
{if(*(p+i)!=0) k++;
1 h1 T: `8 S$ [4 E$ v0 S if(k==q)* C/ M$ e; ^& Z( z7 X) L
{ *(p+i)=0;4 t" J7 M H* k. m: z* @1 i" c; ? g
k=0;% k3 a" s, z# f% ~
m++;& l& E4 O& P! B7 I, ~' r* g
}
/ t/ Q: E) ~# @1 I4 }$ P i++;
9 F8 O7 ]3 k$ [* o2 ` if(i==n)i=0;
2 f, c( v5 h G }
' j/ }9 {; l$ g$ }1 ^$ h$ l- S N while(*p==0)p++; F# P( m6 I4 }8 B' \' p! \
printf("The last one is NO:%d\n",*p);7 [& k& t- }2 S6 F$ c4 L- b
getch();
' \4 M* x2 ~! O5 k4 r. {4 {, |- m* ^$ S; _ V- u
} |
|