|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
×
大家好!, S+ l! T8 a4 a. x# Z6 T
这几天我在忙着编一个问题,我用了一种方法编出来!! k4 Q% \) n. e2 z: M
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
. c) c2 D4 @, U3 ]0 t注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
6 Q$ L1 |- m4 |) M/ z. I( {2 Y* @/ Q3 K
0 M7 z+ x& m) z# E 题目
- m. }# _% W' [/ m& ?1 r8 D山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
; @/ g6 M4 C* p第一种方法:利用循环链表
6 U: E7 h( m1 t- F#include<stdio.h>
; R1 j8 X9 M: b" w, ?1 _4 o#include<malloc.h>
2 d" u. L. K7 X( J1 [& F$ i#define M 8 //共有8只猴子" { I& ~+ P6 f) M* a6 b
#define N 3 //数到3只时退出第三只
2 B1 o9 z! D7 c9 D! ]* `) T; \typedef struct monkey0 Y1 C, I" n# q, ]/ X) T( R5 ~0 k0 e
{int number;2 h; t! M3 z3 c
int flag; |/ M9 M8 ?! C( b" Y) ^
struct monkey* next;! d$ m. _" l# p5 U9 E
}MONKEY;! T* Y# A4 Z# S$ @
main()! D$ m) u2 N! g& X5 @" y
{ MONKEY *head=NULL,*p,*s;0 y) x- f# | O J+ R
int i,sum=0,count=0;
. A9 P7 W1 Z' H, d clrscr(); //清屏
" R( H' U( {0 }% Z8 P$ ~ p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
- F+ Z y h2 H& R p->number=1;p->flag=1;
" W! f) a5 I7 z& k p->next=head;
- G) W. C) p, F d& M8 V head=p;
, k- G$ J4 Q0 @8 V$ Y for(i=2;i<=M;i++)4 t/ B0 ~5 b: S/ ^- S5 l' [5 g
{ s=(MONKEY *)malloc(sizeof(MONKEY));
. A& r6 d9 P& X) h s->number=i;s->flag=1;
* Z1 i z' K! r- p6 I c/ A6 B s->next=head;: p! {% N, c5 ]8 E
p->next=s;p=p->next;
6 K7 p) W5 c% z$ A- K. N+ i }8 D0 Y$ g1 p# e2 I |3 _
p=head;
5 k# c& Z4 }" _ for(;;)3 K7 t# F' \4 [0 q) m: R3 Q
{if(p->flag==1)6 ?; C* ^/ }6 @ K& t! p+ [
count++;
7 l' @0 m4 e- d8 t; ^ ^ if(count==N)! x# {+ L2 w8 d- @" m' ^
{p->flag=0;
$ k4 G& `: x2 |7 F9 r count=0;+ W9 v6 ^' Q3 z* N
sum++;}1 i$ y& i |3 A7 Z* I+ v1 B
if(sum==M-1)/ D* A2 W& h( z! I
break;% \8 v% u: G% X# U' h
p=p->next; c3 j# x* W! ~2 h% |: t
}# |7 H6 N+ o `
p=; ~% A% ~, S' _5 L9 k. V. ^/ E S
head;, j& J' x) N% N, z
for(i=1;i<=M;i++)% Z$ q2 n. b5 g' X7 n/ y
{ if(p->flag==1)* `+ |, S1 J1 `
printf("\t%d",p->number);
# _0 a# q* Z& Y5 K p=p->next;3 _7 }2 I$ N) u0 w/ g, o
}
# B6 t. }0 E4 R! ~+ m
1 w! K' x( o, S% s. a! m7 i
( _4 m$ _; b8 F+ V* ?2 Z; {) \/ ^, {. d7 R; V. T/ D. j
} 2 b" z0 W9 ]6 S; ?9 e
第二种方法:数组8 _: ] G. _0 u0 @- X L7 X" r/ G
#include<stdio.h>) }0 W7 b4 I- r) Q/ X+ ]9 b3 g
#define M 8& b8 A+ m- h! N2 T; t& R: Z! j5 S
struct monkey# o: a1 x& u5 j, }$ B
{int number;
$ J$ _/ |+ }, o# N' O9 Q9 mint nextp;
; ^0 f9 n4 L" Y+ J}link[M+1];$ O# P, J( @8 Y
3 ^) h. x9 |; U4 H( m- m+ N
void main()
' \+ j- p8 U) `: `+ d% w/ E0 J{int i,count,h;
1 X- Y! {+ ]: K. P. }for(i=1;i<=M;i++)
% p2 Q0 T# R9 F2 r T+ g{ if(i==M)
0 x% z/ a3 j9 H& v$ ^# ~0 N0 D; B7 e link.nextp=1;" W" E ^* K& j3 L& t: i1 l) J
else
, o7 [& M% Z7 J" P0 h link.nextp=i+1;2 H: X( F i: ^6 Y( B4 b1 N3 x
link.number=i;
. H) v1 [5 h/ v- H}4 D1 o! M/ V; v4 m' [2 ^7 h5 m
printf("\n");
( j4 N! ?! x+ ]: I" S: acount=0;
# I. u- j/ @# Y* }6 ]h=M;
1 C3 E4 c6 O1 ]& s& Fprintf("依次退出的猴子: \n");
2 o! k s' k6 B9 W1 b3 P% j- n1 vwhile(count<M-1)
5 d, A& m4 a5 E" `0 p{i=0;
: W9 y) y3 x* Z9 r% X! V. e3 }while(i!=3)
& _' r+ E( |: G6 K" \{ h=link[h].nextp;
& s) t& R9 X/ P1 [2 P if(link[h].number)
0 m f2 Q( H. n* d, \2 y& i i++;}
9 ~+ i! Y8 y. d h" {( a
5 E6 A( i" {! u% k, l$ }printf("%4d",link[h].number);
& b- n. `' V& Q* _/ zlink[h].number=0;" u2 I% P0 F# |" b& ^7 F/ v
count++;
. r0 h- H7 V J; Y8 a}7 t) x! r$ |6 p6 R
# g8 _: M3 b* C" z3 Zprintf("\n大王是:");
# L# z) a1 j+ Z1 k/ ~0 m6 c4 ~. y for(i=1;i<=M;i++), _% ~+ K. D6 K$ \
if(link.number)
7 _# ~6 n( v; ^% u% y) j. |+ p printf("%3d\n",link.number);
$ O3 ~3 y9 h" H1 f& \, H1 s$ T
: y+ ?( E) l8 R# K: E
9 l4 C/ F7 u. E, c}
# i1 ]) E& o6 |3 _( l: h) A第三种是普通方法for循环
) w V% p0 j( |$ c7 [$ u% J#include<stdio.h>& T% T* _1 k* Z1 o, e1 `
void main()
& A+ s1 t% d {' O{ int i,k,m,n,num[50],q,*p;
: D7 S# G2 f0 ` clrscr();
/ ~) M. M! ~$ l printf("input number of person: n=");
9 ] y' s& |$ j7 q! e scanf("%d",&n);
0 D- w+ k7 _' Aprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只! M* P; Y8 R" e) C3 u8 m% H
scanf("%d",&q);
$ g( V& @: A! G c/ y5 j p=num;
) f1 _5 }* k r( S! @; O for(i=0;i<n;i++)
! E2 x, S, ^/ m* M/ q6 [, q6 c *(p+i)=i+1;8 A3 k' i- [8 d, G
i=0;% K8 x7 [' b# \' @9 E
k=0;) N. F% _3 ?- K- {% d
m=0;
$ G& R: A r: e" b while(m<n-1)$ {# J/ k( e9 E2 B
{if(*(p+i)!=0) k++;+ B- g! Q- b1 k# a8 Z9 n0 R
if(k==q)$ c1 j- }& D) \; F* O" }2 F$ `
{ *(p+i)=0;4 S6 }/ c1 l+ I6 n) @$ k
k=0;
! B! c5 [. F: x1 Q6 g8 x m++;4 Y# ]! J2 P3 q0 T+ w k) ^
}3 E4 ^% G5 Z5 m( k
i++;) j- h }3 x% l T w& Z
if(i==n)i=0;- m) j2 ]4 C! r. s! g
}
) K. E% o) T% E. u, g. G- X while(*p==0)p++;' w# ?9 f$ Y/ h8 ~% W! M$ a
printf("The last one is NO:%d\n",*p);
9 n4 F' i# K5 @8 ~ i# h/ h' G6 Y getch();5 @, H# \" e' o3 A7 \. e* q
" l: C h4 }, F: E) [- {
} |
|