|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
2 J& ` e, K9 Q1 c, b2 {这几天我在忙着编一个问题,我用了一种方法编出来!- w# a9 o6 f. K3 H7 a$ m2 w( ~" C
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!4 F' o! G# }; H2 @- B
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
* Q" L+ Q9 j* r
4 l- I, r) c" d M9 [4 q* s, e8 v6 N# U6 Z% p7 s# V9 c
题目
# i% s; ~8 k7 W9 A! ^% H: x( U山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
1 }8 H1 d' q4 o# T5 ^6 \: F+ {第一种方法:利用循环链表! `; F2 r! \! i1 t! ?
#include<stdio.h>
+ l" _4 X. J) H! p#include<malloc.h>7 j7 {! u2 o2 G
#define M 8 //共有8只猴子
% k: a4 M* F( A7 M#define N 3 //数到3只时退出第三只
" e! ?: w o% S" W2 h0 Q4 Ftypedef struct monkey. C/ \' u/ j5 Y5 I- c# g" M9 @
{int number;
; H& G$ J0 h( S6 }, k9 @& Vint flag;
" G0 ~1 S. _' t. X1 J* l' @struct monkey* next;
* R$ M1 s e, w. D5 e0 D}MONKEY;
# V- z; A/ k' p' Q) D4 ymain()" l3 w3 k! X( U# o. _
{ MONKEY *head=NULL,*p,*s;2 d; c: H- H3 h4 x" O8 d: S
int i,sum=0,count=0;" {! F. J: V$ l; q3 w
clrscr(); //清屏7 c" U2 I. L; ~ H% }
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
6 s0 G. A Q* f l8 n' V9 ]( { p->number=1;p->flag=1;6 d# s1 M0 P/ L' ~2 B
p->next=head;
2 U( t. e6 R0 Z6 s head=p;& \, @0 A7 e+ W; p3 i& a) M
for(i=2;i<=M;i++): R/ j; t* C+ d) K ]; j! t w
{ s=(MONKEY *)malloc(sizeof(MONKEY));
7 ]0 P$ k7 E4 U# F& |$ t7 K s->number=i;s->flag=1;
$ U7 S. ^% [! }& @% @ s->next=head;
2 `9 S% t2 e5 d, V p->next=s;p=p->next;
' V. _% ]9 g" ^& u0 X* b5 K }2 f8 Q* e# s5 N9 V# S/ N
p=head;& p$ t( _" D2 w& ]1 I
for(;;)
* w( y9 P9 M; f4 q4 G0 e {if(p->flag==1)1 P' ^7 [3 V/ P% B( V% z5 z/ S
count++;
, `5 d; D& [- e9 R if(count==N)
8 |; R$ c N: l5 s! I {p->flag=0;; b1 k1 _4 r" Y2 ^. `
count=0;2 j9 a u N2 }- n
sum++;}
1 e+ N* j+ o6 H% O# z9 X ] if(sum==M-1)7 P5 @9 q# T6 v6 h; h6 I
break;) l" h {5 [& A: g* [; f
p=p->next;
, }8 h* d; t# F2 Z0 o( S }
e9 G8 U9 s! D }* L p=1 g |/ t9 P1 l! v; o
head;8 S1 X, L; x, c9 a* }( R0 C6 o
for(i=1;i<=M;i++)
" s& l5 B; A! T { if(p->flag==1)& ^- `% k, i e8 X3 l. O
printf("\t%d",p->number);
3 }; H( I4 ^1 [$ a p=p->next;$ `* C1 ]- w: P
}
+ D) m- o+ H; B* p6 f
5 o* ?* j$ ]0 k Q; d! t) ]9 V) f W9 U9 V1 U% c
$ c% R% l7 R7 Y} : N" o3 h/ @; t9 A* _& j
第二种方法:数组
1 b% A2 `3 u, A0 ]3 R#include<stdio.h>
6 b1 W5 g7 {: x: Y: r- j% e#define M 8
7 C2 [6 A* Z' |8 l% gstruct monkey
/ H5 s; a' J6 }{int number;- o7 A. m, g+ R$ A5 o
int nextp;
9 \, G2 d. w" ^9 i+ ^0 [" a5 D6 `}link[M+1];
! J5 X& o: t$ c4 c3 R- m! I7 u& T2 A
+ D* M3 m. }. x7 |6 ]+ z; O# }void main(): }" l# a# G- C1 U; R
{int i,count,h;
# w% Z" E2 ~( q0 wfor(i=1;i<=M;i++)
& g5 j: O0 _; i& }3 ]) `, h{ if(i==M)
Q7 ~: @) y7 Y3 x$ v! { link[i].nextp=1;. J6 ^0 O0 F& s; C8 L# {& Q8 U1 l" H
else
" e5 {# t! ^# C link[i].nextp=i+1;
_; m" t& p8 Q t; p1 r. x% H L link[i].number=i;
# q8 O) s7 b/ F% Q$ j}
/ H. ~/ A! ?) jprintf("\n");
- _; j+ o7 O9 F1 a9 U) Bcount=0;. G9 S2 W k4 L0 _+ T
h=M;
. p: [2 E2 y6 y/ m. Cprintf("依次退出的猴子: \n");3 X) |( r9 F& ]' F0 Y
while(count<M-1)
^8 w2 b- a& U2 V" {7 R+ i; ]{i=0;
2 y" p7 N" u$ L# C' N, {' Pwhile(i!=3)4 x! i" f& N1 q; }$ }
{ h=link[h].nextp;
; t0 O1 u% ~& P/ u! B: A4 u if(link[h].number)5 U7 } I: ?8 l
i++;}+ g# t1 R( Z) ^% d6 i
: M, l9 Z9 j" B4 C
printf("%4d",link[h].number);5 Z0 u- M' P3 s7 ?! v
link[h].number=0;
& L) f' l6 G3 ?: }count++;3 T) r3 q8 ?0 H9 K f1 S* F
}
' d* ?' n* G |: F* x# c
8 Q2 ^$ i/ j; B6 n, rprintf("\n大王是:");
3 S' v9 `( Z2 n; w) T: D+ K* D for(i=1;i<=M;i++)
) Y2 X( r( Y. k$ B3 u5 ~( X3 o if(link[i].number)0 A6 i0 D+ H; i( g4 f* D1 q1 [
printf("%3d\n",link[i].number);: @$ \( K7 T$ l, }$ A. z4 }9 e5 ^7 `
7 h2 @/ t0 H1 z7 Y
& R6 d! O0 s( U7 { Y$ p} $ N Q; ~# C1 n8 h/ h
第三种是普通方法for循环
2 @/ e- g: F8 H, Y, g0 W#include<stdio.h>8 n& v4 Z6 q; ^3 B
void main()7 x/ u! ~3 Q8 {6 y2 | s" G
{ int i,k,m,n,num[50],q,*p;
; C2 g- ?( s( F# w5 F; K clrscr();
$ n/ i4 ?) _ H, G# G printf("input number of person: n=");. N# f2 \) ]: E% o0 f# Z: N
scanf("%d",&n);$ C: F# ]8 R4 D
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只4 {7 G0 \; J* ^6 I
scanf("%d",&q);) h3 B7 c1 V+ S `. N5 ^% ]2 `
p=num;/ v, Q+ o9 }+ {
for(i=0;i<n;i++): N2 E; a( ^" P% W
*(p+i)=i+1;
! j) n' E3 ?3 y# z- j4 f i=0;
+ K: g' u$ X6 [3 B: A: X# H k=0;7 ? h9 H7 ~& r4 A0 d( M
m=0;% o, q* Q* v5 j$ a% n, @
while(m<n-1)$ [8 B" i7 e! f% J7 ]( q
{if(*(p+i)!=0) k++;2 P, i" d- O9 n) c! E) {. H
if(k==q)
$ Y- n# r/ X. T4 O { *(p+i)=0;
4 X/ f6 u& ?' y3 X4 w9 m k=0;# y6 b6 z* q( U! q
m++;3 a! a4 m% W# v3 U. j
}! s& g; c7 m- [: \' T6 x
i++;
: F& |2 e6 X" f% W- U& O( N if(i==n)i=0;
+ ~/ s. s4 J1 I& \% [; f }
6 z* q5 P( x) W+ f2 X while(*p==0)p++;
" Y+ V4 f( J( E printf("The last one is NO:%d\n",*p);
+ h- L( V& v$ G3 \ L. `1 d getch();
% k4 d- m; \2 {" n6 E/ k3 E4 S \9 d! C: T5 p& F% H# r- k- Z* u
} |
|