|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
/ T# P/ J' z z+ r( ~这几天我在忙着编一个问题,我用了一种方法编出来!
2 `' F' A7 j4 ? f# y1 [但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
2 N, S3 n7 a6 z: z注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
6 Y5 Z. a* C& X: ~* Q: R$ y
9 j0 K3 J. I! s5 N$ h
5 Q5 }! F. P0 [6 B% K* s9 { 题目
3 v' h X# d! K" V% I) D山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
/ E/ }. S) l( |- x' U' {' @2 |. G第一种方法:利用循环链表" s1 S }! B: _
#include<stdio.h>
% t! O% Y& `& J1 a$ O#include<malloc.h>+ t5 p) y5 ]: d5 H, P! _$ [$ @( e
#define M 8 //共有8只猴子
0 S0 p6 p7 @9 a8 b a- \' t#define N 3 //数到3只时退出第三只; T4 f$ l4 E0 Z
typedef struct monkey, z7 t/ G+ O! G" h
{int number;
6 ]. ~3 r9 T1 L: Z& w( Sint flag;" m3 {1 ~! z9 ]9 ^1 d$ ~% M/ K
struct monkey* next;
& x/ s! O6 {6 u. n+ s2 T}MONKEY;
7 L) ^! T* u. k6 M* Wmain()6 x( T7 c8 ?) X5 Z8 }8 c
{ MONKEY *head=NULL,*p,*s;, k4 k4 o/ R. d2 E, ] f5 w
int i,sum=0,count=0;
( G( ]8 S* ^8 ~ clrscr(); //清屏
# s, ?: t0 j, i4 E- f" |4 a2 G. E- p) F p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存- c9 x% A m* P0 [: S
p->number=1;p->flag=1;
5 P! B. \* y& _ ~+ N p->next=head;
5 ]4 P0 r5 o+ z. x6 P4 v head=p;
8 g6 @/ ?0 Y8 G for(i=2;i<=M;i++); O" Q" L) i6 R- z+ z
{ s=(MONKEY *)malloc(sizeof(MONKEY));
9 a* e( l# K- R2 Z- t4 Y p1 r | s->number=i;s->flag=1;8 P! p: o! x6 J3 v( d* P# q/ i
s->next=head;
' S4 z" z/ |& ]; w p->next=s;p=p->next;
" Z2 D& f& w- Y/ N: s, a7 b6 I2 ? }5 l t5 y! c* d f1 A
p=head;1 c' Q& r6 T0 |7 u
for(;;)' i, P5 O0 w2 e
{if(p->flag==1)& o/ ~# e5 E# l9 F
count++; y( v& X3 i8 F. R- r, F) h% B2 S; ^
if(count==N)
& `, g) e( Z9 L {p->flag=0;( W# d: I4 F: w% J& l$ x$ f
count=0;: ~. q, v8 l% a7 J/ X
sum++;}% k8 J+ x# }3 U4 \: X
if(sum==M-1)
( S. }0 U: T) P3 @2 E% Y2 I break;. K# q7 I& d9 k5 z- c$ Q6 ?# T/ a0 z
p=p->next;
2 I' q2 D0 F/ h; y' G( h }
: s: _" m& ~9 p7 B p=- g& J1 U9 S# z, Y. O% x# ^
head;
8 H& X* E2 z2 o( J+ ]; L for(i=1;i<=M;i++) O# U! U- Z5 Z; O" D: ]/ y# t
{ if(p->flag==1)
* \7 O$ i5 f" F4 C$ { printf("\t%d",p->number);4 \5 l) {- k& C) a# B' K; {2 I# ^1 {
p=p->next;
6 [- ^3 P. e5 b# T2 \ }
/ z/ c+ B- t7 `7 K& D9 {( C! V" s8 p% k7 _0 L4 V# P. X+ }( b
- @5 {- g; q4 v% J/ U- j0 i% t
{* n q, |2 A" D, }/ P1 f* e} 8 _! u* D3 x1 N- p( V, `' a
第二种方法:数组
5 ^6 M& ]/ F: `; h#include<stdio.h>4 Q! t& `4 b4 c) X
#define M 87 f: ^5 b" @9 n# X9 J/ _. j7 x
struct monkey5 f; A. T9 T# o9 f( h! G
{int number;& ^* ?5 @+ l% I% W8 ^
int nextp;
7 K7 U2 v: G" K& c+ M4 h4 b- z q}link[M+1];# Z& L2 K1 O5 {6 u
9 h: w. G$ h+ b/ {/ y, k4 i- Q6 Y2 l; Yvoid main()3 e5 E% x& }& X; E# R
{int i,count,h;5 Z0 v' v. |- Q9 @- z
for(i=1;i<=M;i++)
" ~2 T( Z5 a7 F+ L+ S{ if(i==M)
$ x, G' b) W- R. ?2 P link[i].nextp=1;
R/ D+ H3 C9 \ else3 F% d2 A, g* \9 S* _3 ^
link[i].nextp=i+1;* X: K" L% m, ~/ Q- b) y6 t
link[i].number=i;; E; {! e% o" J1 t
}! A7 r W9 D: A$ ~" J1 J* b
printf("\n");
+ [. u$ K1 o, gcount=0;! e* ]& C: H& h2 \( \8 k0 S
h=M;
" |- p( _& j) W* e: o6 Tprintf("依次退出的猴子: \n");
2 [5 ^, _2 e2 _0 O" v6 cwhile(count<M-1)
' p( i' C- A% O& U- N{i=0;/ ?0 l' g! {5 Y$ y+ o* E$ C* U
while(i!=3)& a% x. e ^& _3 `1 ?3 P' _
{ h=link[h].nextp;. F& ]7 M# i8 Q
if(link[h].number)* V8 d. Y' |, O6 s$ e4 p
i++;}
% x* n$ [% F0 \/ Y* g9 P* s+ P$ Y+ u1 A4 C; ?
printf("%4d",link[h].number);4 ^! S6 S2 q9 ~; r/ ~
link[h].number=0;, P5 E( m- n* \/ N
count++;
2 |) T7 l0 m" @- }3 }}
1 b; Z+ f( N2 ^7 S3 p+ A3 U3 t/ e; {
printf("\n大王是:");2 U; x7 O, f$ s- n
for(i=1;i<=M;i++)% O7 o+ r2 H$ b- L+ G: Q' z
if(link[i].number)
. R/ O4 W Z* j printf("%3d\n",link[i].number);
' c j( b/ ]: e2 r; d5 j5 g$ ]: t# K% G) g1 m
9 U8 ~4 U1 C; U5 w) P} / I. T" R) z8 q
第三种是普通方法for循环" e9 J" t J x, }
#include<stdio.h>
( E/ s- }% ^) O& q4 u* M' E' ivoid main()
+ { h8 y$ b! f8 h# ~ c{ int i,k,m,n,num[50],q,*p;4 E2 y1 f- n# d0 d. {/ @# c
clrscr();
; B: H1 C! E* |8 K( P! A1 V8 X printf("input number of person: n=");
0 d! H7 C8 S0 J# _) E( F" M3 b scanf("%d",&n);
/ I0 h2 U" O( `" v6 U2 b/ e; i4 J Iprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
& F# J8 G6 s" U& x/ ], w scanf("%d",&q);
. [, B6 N! }# C3 H p=num;$ F1 Q) K. o+ M) A5 m7 R/ R4 `
for(i=0;i<n;i++)
) d! \6 M& ^5 D# @ *(p+i)=i+1;
$ y" F# I0 E( D5 a( z9 k: E$ q) v i=0;
7 o2 ]2 X5 A& J9 y7 o3 X* a k=0;( r! @- F, c4 F) }* A- F; B
m=0;0 y# C9 R. w0 ?5 U( ^
while(m<n-1)
' } m( k, N: y6 k8 |5 F0 i {if(*(p+i)!=0) k++;) c- J/ Z' k5 J# \( i
if(k==q)
1 l, [9 }# Z/ o) H& o) d+ v; R) M3 m { *(p+i)=0;; T3 V& N' v% Z m
k=0;+ |( f& s7 a3 `+ m! n0 r
m++;8 i. l$ _+ D K3 o7 U
}
8 c# f+ T5 C: x- ?6 k8 e/ c i++;3 [- d: c5 Z$ N4 R5 X
if(i==n)i=0;
3 C0 P0 O) p0 T }
! B1 y( ^$ h/ {! L3 S9 | while(*p==0)p++;7 q' n3 E/ @( L, Q+ V3 d( G
printf("The last one is NO:%d\n",*p);) ^! y- [6 }9 h) S, g7 w: q
getch();
1 ?# k$ E: v. Q- s5 c) y6 l5 d+ m, b" |5 Y
} |
|