|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
- [5 Z6 \4 V, C0 u这几天我在忙着编一个问题,我用了一种方法编出来!1 R7 Q5 I& r$ }4 v( o' \. D
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
- t3 f, J) w0 C5 y; t# p注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 5 s3 Q; S/ S5 @ z7 ]' q
6 u# b& ~+ K# m9 R: V# `' D. [: J, e8 w) v
题目* m" l& }9 r% e0 j/ J
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。6 t) l- R! a7 g0 J# V
第一种方法:利用循环链表9 X1 @3 c# I/ g3 b
#include<stdio.h>
" T: s& i) g$ _, j2 A#include<malloc.h>3 k* X# `" G( T7 I l# m
#define M 8 //共有8只猴子* C; X, c* R, [9 _6 `
#define N 3 //数到3只时退出第三只0 z w) Y5 c' }( m/ d/ @" N, x
typedef struct monkey4 R0 Y q; n# I2 J+ ` i
{int number;9 Y0 c4 _- U) S( v5 |/ D. b
int flag;" l4 g& w$ H% i4 y9 o3 x, w
struct monkey* next;6 ?+ T' j) T! {3 ]. @2 U: l
}MONKEY;
! W0 I: x/ g5 i" n0 j2 P! T& f5 mmain()2 |) P6 N; M/ P
{ MONKEY *head=NULL,*p,*s;
/ L' O& w$ g+ {! H int i,sum=0,count=0;" g( z! L0 H* Z$ o- l
clrscr(); //清屏
) c3 ~* f: n1 R m( a3 f p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存& a9 l# f$ ]1 X& _3 [# i
p->number=1;p->flag=1;
4 m! }. l) ]7 u+ e- q p->next=head;
7 |- S# k- `: ?, ^4 c0 ]+ `* @ head=p;
f+ Y4 g( h$ s5 ` for(i=2;i<=M;i++)1 ~' n2 M7 d' _9 [$ e: w5 F; L
{ s=(MONKEY *)malloc(sizeof(MONKEY));, R( J$ b" h" {/ l0 K) e8 ^, o' Z
s->number=i;s->flag=1;9 b% s& Z; h/ t# ^) z+ M! x7 Q
s->next=head;$ u$ ^3 A/ m0 t
p->next=s;p=p->next;
) G0 _: L5 k6 ` }% g* f& R& B1 n$ [! O* F8 p: s
p=head;; x0 N* o' I. I
for(;;)
+ e" ~! i6 B/ p8 `2 S& l' c2 V {if(p->flag==1); O$ b6 o' n7 v! ?3 X
count++;
$ ]. l6 P# R9 l2 s3 U! w if(count==N): _ U- Y. \9 U6 B, ]
{p->flag=0;
# v$ K" I9 K% \* {0 _8 z# A/ x count=0;
3 A, u0 U% i5 k sum++;}
D6 S, b) I' q if(sum==M-1)
s0 n5 J* f. b' X. U1 u! {/ s0 a, V break;
% Q% o& w4 G1 i6 l* U& Y p=p->next;
; ^7 e; l% W3 `( j* o* D }
' {3 u: u7 c) h3 D' m p=" R. T% n2 Z! G
head;
/ }5 _: N/ z- \7 X1 A& K for(i=1;i<=M;i++)
! I) ?7 V$ J4 ^ { if(p->flag==1)9 a- q0 T' A; o8 M7 ^2 v" q! \
printf("\t%d",p->number);
4 Q0 H/ n* D7 E! s p=p->next;3 d2 v" U0 W" K' k6 U$ l
}% p) T: |; b- U* @6 s
4 A4 ~6 |/ [ g1 Q' s# D: V) [5 i# t9 g
* }9 a( s+ k }. c: Z}
/ M4 `- D0 `& ^5 \第二种方法:数组4 V) o3 Y. S& L
#include<stdio.h>
. }1 H5 k5 z# Q$ S7 {6 G) v#define M 8$ S6 o1 C: Z' \2 l0 J
struct monkey
' x7 {2 q( h! n; g: N{int number;$ m. t c0 L. m7 M/ m0 y
int nextp;0 x2 Q9 I& L! v- O" Q4 J
}link[M+1];
( x* ]4 t9 D/ i* T, P8 T
$ F3 G) y" {( S! Z' [2 A. nvoid main()% h0 f, y" q; K; U8 s
{int i,count,h;3 N1 w. t0 X1 q: N7 b* i! C0 k
for(i=1;i<=M;i++)
0 ~9 @9 m$ e0 H+ B! w1 s! ?& F{ if(i==M)
; j+ h4 u: I" |2 c1 J S link[i].nextp=1;
: u5 u7 H0 `0 }" t else6 T5 f4 t. e# P9 w: ]: Z \
link[i].nextp=i+1;
$ q* i6 b+ V9 O, L/ X4 u _ link[i].number=i;2 r2 ^# U, K, e* X6 D8 c, M
}7 u8 o7 b9 J; e, D6 B
printf("\n");
) h" F/ _# u+ Mcount=0;
. w0 E& {, u% Ph=M;: P7 U6 ]; ~/ z( a" T# A/ d$ f6 j9 q
printf("依次退出的猴子: \n");9 N. p, i# D# N
while(count<M-1)" T1 U: D% F. Y9 b, n1 `0 m
{i=0;* R, _# [2 E1 L" \
while(i!=3)( d+ M0 L# [$ i& C+ B1 U" ~6 o
{ h=link[h].nextp;
5 Z9 T j m5 R# `) B! t if(link[h].number); m- O! K; c, U
i++;}
8 m: ]% S( c7 r. V# E% u
/ P) S( ~6 y! O9 L2 gprintf("%4d",link[h].number);
+ J4 J! E9 s. u( Olink[h].number=0;
2 L5 f* x- s& b% C/ bcount++;
: ]6 f. y2 d% f/ U6 o}8 |- Q, W6 F4 q$ |' Q8 h
" A. U4 R; _; d Y1 Z
printf("\n大王是:");
$ m) G0 Y! f' P& k6 @ G for(i=1;i<=M;i++)0 W7 N) U" Q+ l0 g' V/ ]" S) Q/ l
if(link[i].number)
, P0 I* _, a# E& w8 G0 | printf("%3d\n",link[i].number);
- D G* T% J0 }1 e2 D+ D4 l/ N- g9 P! h. U( f
, d& X" a6 Y. E% X} ! K9 @: w5 F9 D; f$ B- z3 g
第三种是普通方法for循环) N1 x- k. E* m: r1 Q
#include<stdio.h>6 q- O1 Z3 T, I: D7 ~5 f
void main()# N3 C7 W% n: i* f* ~9 v
{ int i,k,m,n,num[50],q,*p;3 j' @+ O0 }. c! J% P
clrscr();
# g- o3 N/ {# y- ~' r0 U/ a, Y printf("input number of person: n=");
/ H# n r4 N* v1 l scanf("%d",&n);
& C1 g. q/ T z; T8 \# j' }printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只% [# \ ~+ C4 e' l! K* B9 ?& i5 r
scanf("%d",&q);+ r8 O7 M3 s6 _2 A$ C
p=num;" a& y' C$ j% { q! k
for(i=0;i<n;i++)
* n C9 l/ b1 G3 r) G6 a; x0 X *(p+i)=i+1;
- U% {$ n; l: s1 N i=0;2 E* T' |! M! b9 _) o; a
k=0;
1 L# S/ V* B1 ^1 q- [" @. q# ` m=0;
& z, f' d a V3 B/ x+ |2 ?/ h while(m<n-1)
- Y9 I. [. o& \! h {if(*(p+i)!=0) k++;% _' R/ ]% d0 w* Z) X
if(k==q)4 P) z0 l5 d5 |) ~$ A
{ *(p+i)=0;
$ ^) }* L/ v& y k=0;) W" u; d0 N) J* d z8 o! ]
m++;: Z* J; F m0 x/ ~
}
( z# o, w3 S" r( B1 v7 P3 O' ~ i++;
5 S( i( V0 ^8 s4 g, c) N6 T if(i==n)i=0;. {0 U! [( N" I! q% Z; I1 Y
}
( t' Y+ a4 ^) M while(*p==0)p++;5 K3 k1 I/ `, q, g$ l, s! t9 Z0 _
printf("The last one is NO:%d\n",*p);3 @0 A0 t& z1 U% T! N* D
getch();& ]) L. e | Y2 c! Q {
1 F+ _% J' E- C* b f i} |
|