|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!* a- [' `( O( `* Y: @
这几天我在忙着编一个问题,我用了一种方法编出来!- Z. T( m2 x a# P& j
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!3 f4 w7 x- E% |! I5 \9 p, R- g( G0 G
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
* W: H& n2 v+ s% l
6 k5 U5 {5 w3 d* K
3 Y. |3 m" A% C7 u: ], @4 K 题目
/ ^# X, ^9 N9 y& S+ H, _山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
, D2 c1 w4 Q4 M9 a# O5 O4 i第一种方法:利用循环链表
( p1 J/ R8 j" F5 v#include<stdio.h>
; I! z! d% p" K#include<malloc.h>
_% ?/ Z9 B0 h K, X) w; z% _#define M 8 //共有8只猴子8 m% @% g+ Z" z% k& C
#define N 3 //数到3只时退出第三只4 u/ M& \6 [$ c& o
typedef struct monkey1 d' y% G' p- b+ U( @
{int number;, {" v2 y% K, Q1 Q; r* C, l( Q
int flag;
3 U- V6 G( z. F# {6 i& ~9 jstruct monkey* next;& m1 D+ E4 C7 c* L2 R
}MONKEY;
) r5 e4 ~1 G" J) gmain()2 S1 W; ]* \$ ~
{ MONKEY *head=NULL,*p,*s;3 v3 i. ^+ w4 J7 Q, g
int i,sum=0,count=0;0 J/ q1 D6 g& M6 {3 P
clrscr(); //清屏$ _: n! @ k) b! f9 E# n
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
7 E; b7 l" r) l1 v5 ~3 H2 e p->number=1;p->flag=1;
$ h1 V, j) n# R# M p->next=head;
6 y' K, U# C" p head=p;
, A: |* \% f5 c! T( I l- A" S for(i=2;i<=M;i++)
! h& Z3 k m5 G: O( q% a( h/ K) m { s=(MONKEY *)malloc(sizeof(MONKEY));
' y" i' l5 ~- X8 A; w s->number=i;s->flag=1;
1 j& g+ S" g5 j+ M9 r+ v. U g9 o( R% X$ O s->next=head;2 @$ H v0 D' x6 y5 f
p->next=s;p=p->next;4 r6 Z0 f; C/ C' C* G3 r
}% f; F- G9 X1 n( x3 S
p=head;7 X% A8 p7 ~ d% t& {) L
for(;;)
: r: X2 o% J8 e$ Z1 |1 \ {if(p->flag==1)$ X: G/ Q3 O5 p+ f' a
count++;
7 P" ~9 g. `. w6 b0 p if(count==N)
# ~5 t$ H" b' |) c9 l. B y {p->flag=0;
. z5 ]& F4 \% o) k# i3 M0 Y count=0;
( s" p% L9 \. D7 f$ C* I7 R sum++;}
7 p: H& t3 o9 I1 }- u if(sum==M-1)4 c* X @$ g8 O e4 A
break;
4 C- Q1 x5 y; X7 o0 Z. Q7 G, \3 M p=p->next;3 i' m$ K& C8 q& Z0 e; ]; X% p
}
* u* ^. ~8 o. g/ W p=
2 V* V7 z+ g" ^ head;
8 v& O1 N3 H2 l for(i=1;i<=M;i++)
" i, f7 O4 W# \7 g { if(p->flag==1)7 x3 I, N, s0 q1 D* L- A
printf("\t%d",p->number);( [+ K& w J2 z! W T. j8 s
p=p->next;
7 W+ g- K) ^+ w& u: l) z* d } `* i; Y( w7 x
/ H8 G$ w) g& t* u' U: f7 V# x3 b K; g g( S
; L3 m5 h( [( l8 J}
5 f. H8 U. F. r( _- z第二种方法:数组
: g; y% ~0 b/ C$ e: L. G+ E3 p0 T6 ]#include<stdio.h>" h0 K& c+ \, ?+ @% t9 X
#define M 8( i# W" F2 ?' D6 r6 s
struct monkey! D+ H6 r/ x2 M# e3 i/ a* O7 Q
{int number;
! a. @! ~3 O$ t- Z" v0 [int nextp;
! u# W h& O. ]$ U8 \}link[M+1];! k/ S' c; _) k0 D$ L
8 ]- q% p! x+ |4 o8 C2 s& e1 r
void main()
c8 L. _8 q% X( B{int i,count,h;
" _. A: N0 P) O+ z+ I3 vfor(i=1;i<=M;i++)
+ P6 C, ~7 I! U9 l" [$ I; _+ J* ~{ if(i==M)
. N/ d' B" n. l V- c+ x6 s5 ?7 k link.nextp=1;% H- O. V# |8 n' p) U* E8 u
else7 V% Q0 K3 g- ]7 P3 H0 A* c
link.nextp=i+1;: x) T i7 x2 h! u' K' `
link.number=i;; n! t7 v4 u8 g
} p2 M! Z( H4 _/ u' d8 W7 E
printf("\n");) c' J0 i; r; \3 H
count=0;
& E Q) ]. C0 Ah=M;* Y, G; F: V2 P6 c
printf("依次退出的猴子: \n");
5 C. Z# m( d7 N) c' [while(count<M-1)4 {5 [) ?9 f/ b
{i=0;
$ S4 L3 v. J9 x# M6 H E4 Cwhile(i!=3)9 N8 o; J$ { Y+ p- d
{ h=link[h].nextp;: I# z. O$ m( B! T% K6 f
if(link[h].number)
2 s# j. L8 H6 e( p' P9 n; `$ x4 S i++;}5 V. n7 M0 |5 F. J W
% _. T9 {' h3 h5 J0 X) G- I
printf("%4d",link[h].number);
3 O! I+ N8 Q! y; Jlink[h].number=0;3 {! I/ Q/ S$ M" @* ?& V& A
count++;
/ [2 g' M% T9 f% l5 D/ n}6 g- u& ?0 y. N' Q3 ]
+ F P `: j7 K4 i1 H
printf("\n大王是:");
/ m9 S2 V0 I# ]) i5 l8 j0 c5 y. a for(i=1;i<=M;i++)
( J# I0 {) k5 C0 q) G if(link.number)
) ]; h+ ^$ M- U% q& U printf("%3d\n",link.number);3 D- B2 |- |$ t) b3 N* W
( \0 ]9 ^( P% k: n S
) }0 d1 [( S* i3 _3 o/ u( J}
" y4 z$ g1 n1 Y) k# j, p- }第三种是普通方法for循环
$ P) o: `# z7 H: {; r#include<stdio.h>
3 a' d# B' I$ Qvoid main()
# W+ ?- ^1 d8 V. m' m{ int i,k,m,n,num[50],q,*p;0 @( Q9 z$ [. k' d/ R
clrscr();7 j% z4 w4 Q4 `% g6 S5 ]
printf("input number of person: n=");% ^+ M+ F4 `1 K; r0 _
scanf("%d",&n);# Y; n& J4 V3 O
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
# V' l5 c' V- q& N$ I7 j2 J scanf("%d",&q);9 d* v7 Z, ]# c9 o" X
p=num;
- G) B0 d# S, f E) P } for(i=0;i<n;i++)
. L" {- N) ?6 S. I& z0 X; Q *(p+i)=i+1;" [. C4 V5 L& _" ], g/ H- W8 B7 Z0 w
i=0;/ E( e' u: K# s1 _3 B& F9 i8 s
k=0;0 `6 ^% K+ \, x
m=0;
# c7 r$ C- E1 N/ j while(m<n-1)( i/ l1 z( g X" e4 z9 D, J
{if(*(p+i)!=0) k++;) ]( X6 Y. j. y8 ~" E6 {
if(k==q)
7 F) q- g. m3 q8 p8 s8 h2 ]% \" I0 V { *(p+i)=0;
4 \# w/ Q3 p) U/ `& u5 g k=0;( W/ |5 H2 Q: J( _9 J
m++;$ G3 f8 ^: w9 N3 K* E: Y. O& ?- i
}, x- f) u( N; }" ]* B7 f. O
i++;
9 k/ V8 Y+ |- M if(i==n)i=0;. F' U5 A2 L% [3 U, ]
}
6 v& {- T6 L" f2 P) u while(*p==0)p++;+ F+ ^* M& m, p e$ \
printf("The last one is NO:%d\n",*p);
" M7 N! S/ Q/ k$ u$ N getch();4 O" r. }7 i, ]# U7 z0 a/ Y
$ s) T8 i% K$ t6 G3 C) D* v
} |
|