|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!% J( \6 f, I& [# r
这几天我在忙着编一个问题,我用了一种方法编出来!& }( e0 {& B, Z9 N0 q( ^
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
9 N/ F8 ^9 m/ e: d( b. z注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 2 N& F7 p/ M: e& j
: V% }5 E9 E. Q* V; m
) K a* l* n& t! i2 H
题目8 G/ U. ?4 J; R
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。- W) c. p: u! p/ M8 ]$ g
第一种方法:利用循环链表/ l; m+ A. |* }9 |
#include<stdio.h>' l' M0 d' f; |, w! p
#include<malloc.h>
, g* E1 C l; ` C#define M 8 //共有8只猴子
' e# ~9 p; `% @% t. m7 l' k* Q#define N 3 //数到3只时退出第三只
( `$ D+ \& h; t# N$ Ktypedef struct monkey1 L I! D& \' v; Y$ _
{int number;
* G. d v$ Q/ A# d1 nint flag;4 N" V: I" L, Y) n( H4 r- X
struct monkey* next;
4 U3 g- R: c' i' g5 k}MONKEY;
3 [: G! k' b. E% Amain()
, x% {/ j7 U$ r, D2 ~{ MONKEY *head=NULL,*p,*s;
7 {% v( w7 F' X! ]* }# d int i,sum=0,count=0;2 l7 j' d) \/ `: Q, w- ]
clrscr(); //清屏. I7 r `- R( r2 B
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存8 R* b/ T+ _: `8 f$ Z; Q) i: E8 c
p->number=1;p->flag=1;
9 m; Y, ^$ K# ?6 ?& P* C p->next=head;
6 O; k4 R) K; @0 Y# H0 P' Z head=p;
! @. A9 F* X1 k3 C! X5 v8 g1 i for(i=2;i<=M;i++) c" {4 C1 N' |8 Z% `* e" t
{ s=(MONKEY *)malloc(sizeof(MONKEY));+ x0 S/ V( n0 b( z; H9 X' z) H
s->number=i;s->flag=1;
9 d6 z. k2 m; O5 t6 z, f+ S \ s->next=head;6 p4 w0 ^% B: b2 ~9 m0 l, x! ^
p->next=s;p=p->next;; z& u( j( `' S3 K
}7 n, t0 Z" r. ]
p=head;
' P0 y1 d8 b4 @6 [) D! K for(;;)0 W; Q8 }: `) o# r+ T f' f
{if(p->flag==1)
& d ]9 z t/ i9 U/ I3 K- O1 T5 j count++;' ^0 E- v% _8 I7 j
if(count==N)# B# \) _) i2 `. ?
{p->flag=0;2 a+ q$ _8 Q$ N5 m0 O y
count=0;% w. Q5 R; I7 ?- x
sum++;}
3 |! H0 \6 m7 V* z3 M1 ^ if(sum==M-1)3 ^- n! T, G: g7 x( ^; Q
break;
* g! R" x, c, b7 S p=p->next;. ?* c7 w# g6 X3 ?* W- t1 R. Z/ F
}
' W( H: w% X$ x. U2 e0 H p=
/ j: G+ r9 C% U head;' C9 D6 |! \: f9 v
for(i=1;i<=M;i++)
3 h# `% O# W+ f1 M) f% ~ { if(p->flag==1)
" j5 E0 T$ f- i9 y; u4 \, y* e printf("\t%d",p->number);& \( g9 w6 ?+ A5 o
p=p->next;
4 p% O2 w( t- h8 q7 d }6 @5 \ R, u# `! p+ N% k2 B
) z' E1 `3 K+ f% @* f4 i, N, B2 d2 N
2 C$ W6 K9 h9 p" s$ e) r} % Q g# F9 q) Z* ~2 Q
第二种方法:数组
9 H+ F* O* y; Y" H8 Z% l#include<stdio.h> _& K0 p5 p$ `3 y3 a, w
#define M 8
2 ^/ T$ a v+ z7 C' B* `" _struct monkey
3 T% \6 d/ {) {$ b8 P K4 l0 s{int number;& P$ u: q# k0 V1 a3 F: F- J9 a
int nextp;) M0 @; r! d3 m n6 h
}link[M+1];
* J4 _+ h6 |. R1 z& s& `) H6 }9 q$ p9 n0 l
void main(): @: i" R2 ]# Z4 F! `2 m( N+ Z1 M
{int i,count,h;8 N. U8 Z: ]& o# ^; U. ?9 g
for(i=1;i<=M;i++)
" d/ `4 x. _, n' T{ if(i==M)
+ F& S7 j/ k- a! w/ S# S link[i].nextp=1;* S& b6 t$ k! W7 X, ~' g' S5 {0 F
else& B; X/ K& U( ]# Q0 W# {/ l1 X9 R
link[i].nextp=i+1;
' j! `. |& j* g1 o: w5 Q: U link[i].number=i;
( J. ^% C6 J5 L. W}& W* f% t4 ~" g4 ]
printf("\n");
2 g# c' q( n3 s/ j, t# Z( S ucount=0;( B, z$ i# `) v- L' l
h=M;- r! K/ i9 Z# o
printf("依次退出的猴子: \n");9 M; y1 M( i# k7 j! T
while(count<M-1)3 n1 C9 L# I X) k! s- s
{i=0;
6 ~* T3 m, A4 W, A( {# j7 H% \' i4 Fwhile(i!=3)
1 ?+ c( r' r# @: }- j{ h=link[h].nextp;7 g2 Y2 T U8 [: n+ I) Y6 S
if(link[h].number)
3 f1 J- d; Y0 o) g: T3 R7 P i++;}
" m Z2 k, _4 ` E9 s3 X/ }0 j' Z4 T' p, y7 f6 A
printf("%4d",link[h].number);
/ B$ ]4 D2 ~- {" t Q$ r3 Ylink[h].number=0;
* @" R4 t, S- Rcount++;. ~) f( a6 f3 s c3 ^$ I
}
9 U+ G9 ^& ?, A, }& s3 V$ ], i+ R7 R# ]: H4 L2 k; O
printf("\n大王是:");
; q. x4 }5 ~# I7 A- o: c for(i=1;i<=M;i++)
$ A2 y6 \$ Y3 T5 M5 X& _ if(link[i].number)
) Z% \7 |: M. i; i* \7 d3 J) D; q2 _ printf("%3d\n",link[i].number);/ g7 u2 c# ]" o; t; D( ^/ O
/ ~( i& p2 ~) b: `; s$ N
. C6 v( i+ c9 a, t/ f( F}
s4 C! i! Q8 R7 U) U第三种是普通方法for循环
9 E: b; H$ H, ~( c#include<stdio.h>+ t7 ~/ d2 e1 S* p, D& P" S
void main()
4 K5 I. ^1 k9 J: @. _$ [: V{ int i,k,m,n,num[50],q,*p;9 X* j: I( [ M) W7 F" i
clrscr();& q$ N, z$ [- R! l
printf("input number of person: n=");
; Z- g s1 P, o/ R+ v scanf("%d",&n);: C8 a8 F% r* y* ]6 w; w3 O
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
+ g6 ^2 x, O K1 s9 O0 P# i; T3 x scanf("%d",&q);
4 ^+ M8 v, v+ s' Q& B& B" y p=num;: E% ?; g) K. i: e8 `2 g
for(i=0;i<n;i++)
( P3 e) S" ]1 k. b; ~6 L7 [* O *(p+i)=i+1;8 M9 y3 c$ Z8 X0 {
i=0;. j5 d% P) d7 U8 }
k=0;+ r" {1 F* ^; z
m=0;
' a! {/ u% ^$ c! Z, m. B5 r- j while(m<n-1)
7 T3 n1 d8 D8 r+ w: r2 L. b+ o! ^ {if(*(p+i)!=0) k++;: v l) m; _ Z0 Z# ]! z
if(k==q)- @- b$ W$ Z; k& ?5 w
{ *(p+i)=0; ?7 W" _6 h; h
k=0;, B- \! l! c: X
m++;
+ S" e- i- s3 [ }
* y" c6 w& p; a i++;
- c# c8 H0 v$ P; ?7 \ if(i==n)i=0;
7 O! Z- B( q0 S, y1 t8 M }; {7 P2 J3 v: H6 S) U
while(*p==0)p++;/ y# F! N* ]4 b- ^& G4 ?
printf("The last one is NO:%d\n",*p);
$ \/ p$ t& b: h9 U& w7 ^6 p getch();
8 F( O) S+ v$ o- j h: i
" y& X0 n+ R2 u1 ~0 e9 D5 A5 \; M} |
|