|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
2 _" Q, I7 g6 ^ `! N这几天我在忙着编一个问题,我用了一种方法编出来!2 f6 [2 D, d! M2 v7 x- Y* Z. Q! @
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
8 p- u+ w2 y: J! L注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 - `% z3 e9 e! O4 t6 w
) j" i$ e. C3 k
3 w4 p. Z. Y5 }6 u 题目( r* |1 k7 v+ k" G# C6 O/ g" g
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。4 r( i: j1 D0 M6 W
第一种方法:利用循环链表
. a* `- h' Z% f7 q2 I#include<stdio.h>
5 J1 F2 N/ ~2 d" J. j: E: t#include<malloc.h>7 i3 g( R: P1 R
#define M 8 //共有8只猴子7 p( m& d3 y0 s- a( s) y3 J
#define N 3 //数到3只时退出第三只/ Q; N& k ]% r& P6 ~
typedef struct monkey
, L: j, w6 \. \{int number;8 J8 |1 `- D! B) q- K, h
int flag;
% T+ \% j; h1 a% {" qstruct monkey* next;0 o1 r/ |) N9 }' w7 p/ p
}MONKEY;9 ?/ H8 ^- w& k9 g
main()
k! a# e1 E% J6 O" r0 t{ MONKEY *head=NULL,*p,*s;
' t5 {; Q1 l* T( J4 S" X int i,sum=0,count=0;
]* U5 C0 E) D clrscr(); //清屏* f) x+ M3 n: |
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
7 E1 |9 J+ S* M3 [0 B0 T, k p->number=1;p->flag=1;
6 O/ u) t8 J4 Q p->next=head;
( K4 @) f. N3 g* Q. t* d1 G% E, J" w" e head=p;% {3 m; U; o, m' k% ~
for(i=2;i<=M;i++)
4 c1 D& K4 Q( o: f" {. b, ` { s=(MONKEY *)malloc(sizeof(MONKEY));2 z+ ^1 e0 j% s! ]9 O! A
s->number=i;s->flag=1;
0 O- A% s; d2 q- \8 R8 A1 n s->next=head;! ]# w$ j) t( H& v! T+ x
p->next=s;p=p->next;
8 a1 m, \# K7 G* W7 m- @ }
$ Z% ?9 Y2 O; @8 w' B p=head;+ E6 {* ^4 R& X) W+ j
for(;;)
, S6 C4 d0 |0 T& A# P/ P9 l {if(p->flag==1)$ p6 ^* e& N, D) e, @, |
count++;
; g; u% P' f& j0 G7 |9 X( e; o if(count==N)
) V6 _, t- I. f! D% w; \4 o% \ {p->flag=0;
. \, H) H! e0 R9 l* ?; G' T count=0;) m. q% T. S3 B0 m
sum++;}
! N$ l$ E2 U" M# ^ if(sum==M-1)
5 I4 B/ r/ s5 S break;
9 J( @: k; l5 n, a; f* q p=p->next;7 n5 S* O8 t% c# \) v
}8 Q3 t0 i) P7 x6 l( h7 _$ D# M4 ?' \
p=" N4 q4 }$ M' r0 g6 o( I
head;
/ @+ j; _ d+ j2 J6 G% [+ d; _ for(i=1;i<=M;i++)
# l4 c4 K5 t7 n1 D' G A* k( n/ M { if(p->flag==1)
3 T$ E2 A8 ?. d/ O. P' j printf("\t%d",p->number);
8 |5 S: H- Q( m& g p=p->next;4 r2 Y `' C; c6 R4 d
}
& G! P. m. J5 p& W+ l" X3 ^+ u" o1 s( n* z
% U4 c8 _( s$ t- B+ Z, |
b$ T! c2 p4 `! y; V) ^8 ^1 J% m% a}
0 G' P) H. }+ Q, d第二种方法:数组
5 ]( B L# j2 ?3 E#include<stdio.h>: J. p; b6 C* `+ p! v. Y! i
#define M 88 C! c+ ?# w5 Y% m4 E, T% T
struct monkey/ b3 {4 K; s: G! ?
{int number;
* o, [$ P8 ~: K6 X& l! mint nextp;
! e" V+ Y% [; Q2 n9 ?& a}link[M+1];
6 n9 t% u' n' H( l6 |& k' D& z6 Z8 [. x( w
void main()8 ~! ]2 l6 O: N5 v
{int i,count,h;
+ P6 Y3 _* H4 V7 D+ rfor(i=1;i<=M;i++)5 `+ O- U, {% V( a$ T
{ if(i==M)( a6 l5 Z+ F- Z8 \2 ^
link[i].nextp=1;& h- y/ U$ M7 v" d
else' k$ j( K2 V# ]
link[i].nextp=i+1;
7 e& d/ ]& S0 N, z: p* t* p1 z link[i].number=i;6 e& m4 n6 q3 g$ o- a! W" z4 [, d" }
}0 z G& ?$ ^, T$ }' O
printf("\n");
; S0 T& I2 x; s4 z! Q! {, i- p; w% Xcount=0;
: j- ?5 H" ~8 x# V3 y5 |8 Bh=M;
$ d s% M* V. Z8 |# ^5 `; p8 \9 {printf("依次退出的猴子: \n");
6 ~1 v* L8 k0 f% k8 }9 f4 ?# N8 ~while(count<M-1)
: E- X5 ?( ^6 R2 v6 K( A{i=0;; G4 y, m; r# M' r* t1 v+ P# h
while(i!=3)$ k. ?7 [4 V0 a
{ h=link[h].nextp;
% ~2 g3 B) B' j" l0 k" b if(link[h].number)
0 s$ r+ ?7 ^+ t1 l; O2 M& J# ~8 Q0 x i++;}# g8 W M& r& J' Y! _
& l; ^6 T, e( o
printf("%4d",link[h].number);
& z) j$ D( ]/ i: w$ nlink[h].number=0;, d$ d* z0 e# {
count++;
/ Y8 S: {+ c% v5 ]}
" X6 ?" p# U+ v( \& X9 `+ u
0 D) i5 \1 ~( Jprintf("\n大王是:");/ w q2 i9 E* Y; p2 L% G
for(i=1;i<=M;i++)
- M+ e9 J7 P# E( G. j% ^# [ L( D- w if(link[i].number)& F1 O h1 z' [5 F4 t
printf("%3d\n",link[i].number);' y( v+ m4 q2 x! H
# a) Z" i' f# H+ Z1 X8 ?" _- C! B
7 m% K7 T, R; `! F/ q}
6 z5 O9 g, u0 T5 V/ Z7 m第三种是普通方法for循环3 K3 L5 J: Q6 M
#include<stdio.h>
! x' `3 K: A, {1 l1 E$ b2 O# Rvoid main()" N! m5 v7 s/ O2 j, d1 y
{ int i,k,m,n,num[50],q,*p;5 _8 K7 V- o& u$ U% }, v
clrscr();3 r! y& ^! ^6 h# L
printf("input number of person: n=");6 K+ o( C3 U* d" o! N
scanf("%d",&n);
$ N; S5 p: }+ r" |printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
6 x* [; s# ]5 g/ U J% s. @$ z* g scanf("%d",&q);
9 \' w' p7 y* j! F/ J p=num;
' k: _. ~$ U* G% G1 v& [1 L for(i=0;i<n;i++)
7 y6 D2 {1 p0 b; {" J: [0 Y *(p+i)=i+1;, ?2 o8 B' ~+ v" r7 f& P
i=0;# W( ?) ^1 m m$ w
k=0;
+ I C8 x. M: t$ Q2 g# P5 ? m=0;6 \( C3 f$ I' S2 u* e
while(m<n-1)- H0 h; o2 i9 w0 h: U; K
{if(*(p+i)!=0) k++;
! K7 }( w" }1 u if(k==q)
) X& z! @1 L* F v { *(p+i)=0;
) w3 x) o# B) [9 v! Q k=0;7 H% j% n, M5 Y+ x2 |
m++;" s3 ?4 H* s: H% ?6 s: q
}/ @. U. R0 O( u, m. Y! m. Z
i++;' W, O1 y# S% U
if(i==n)i=0;9 `, y: o v) I
}
0 A# I) q. B& x+ D0 t while(*p==0)p++;
J/ s M! _5 b3 E, E% ~ printf("The last one is NO:%d\n",*p);: n* Z9 A8 V4 C
getch();& _4 `1 d$ Y& E$ h0 m6 r
) L' N& t/ Z1 A4 P# @8 g" K
} |
|