|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
9 I4 q' R1 u# v" [这几天我在忙着编一个问题,我用了一种方法编出来!9 p# l6 i- P- N" y3 M6 J
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
7 |! G0 i, E8 A& X6 f* }注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
! R O: d% a$ e$ f+ t$ F4 j d' n7 B, y% A% w
& ?: L5 P( f7 R0 c/ |- Y& n 题目# W* y# v& f* w
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
1 E4 U: R0 k) [' X# t第一种方法:利用循环链表
( a0 P- f) C+ x3 ]! s#include<stdio.h>
1 q% R, s; n0 t4 i#include<malloc.h>
4 H8 m1 n4 f& d8 w#define M 8 //共有8只猴子
( {& x5 n! a' D- J9 S, ^#define N 3 //数到3只时退出第三只7 j- `; D' h. Q5 F" U* q
typedef struct monkey
5 l4 Q: C& O. t. l3 X/ f( N{int number;
* j( V7 H6 R; d, ]6 `( z' aint flag;
" O: M$ V* M3 b7 ^5 s* |, r) Lstruct monkey* next;
0 T6 u0 J. f/ E$ I7 `1 s" E& K}MONKEY;* {' f9 L: K7 J& y! j( U
main()
1 j2 D! p8 {: H' Q" C{ MONKEY *head=NULL,*p,*s;
) d) m: F. x5 @5 `! t" q; o4 P int i,sum=0,count=0;, U& Y! [% E) F/ `6 B
clrscr(); //清屏
0 Q5 \* U+ \. g2 D2 E) N" J6 H p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
' v: [( |+ i: C1 @% ` p->number=1;p->flag=1;
8 w7 T* }3 D& D6 d4 [6 B$ @ p->next=head;
' B3 l6 K4 X8 S( ~3 b head=p;% l( b- `3 i$ o% W
for(i=2;i<=M;i++)& m/ f* A4 y$ B& b, ?
{ s=(MONKEY *)malloc(sizeof(MONKEY));6 W/ u: F2 P, m, G' P
s->number=i;s->flag=1;% F$ v5 N b* d M! K3 C- |/ M
s->next=head;) |- ]6 o# A5 U4 J8 M
p->next=s;p=p->next;; M7 h7 {: K5 K' |* t% X" a% q
}
( i& V# t% S! e! Y p=head;
. E3 \ _' x- {* l8 {8 U; p2 F4 g& T for(;;)$ w# |4 {5 {& I# Y2 S
{if(p->flag==1)
/ n/ K% d: r" S" `: [" H& c- M+ B \ count++;% J! n. F- R- w# ^
if(count==N)
) @ c: ?: [/ z9 A1 B& T {p->flag=0;
8 x) [3 J% O: [4 _3 H$ g count=0;
3 C5 F U5 Q. U! [7 } sum++;}
( K, ]# Q, o7 _! q$ } if(sum==M-1)% C3 L+ w# f3 P9 K
break;
5 o* c q3 x% t* c: X p=p->next;
( j9 Y6 T) r4 F6 ~/ \" ^( @ }( h9 M: O8 f7 n8 G5 O# [8 d1 Y6 U
p=
$ g6 T" e6 J6 S" s2 p& L head;: t7 W0 d$ U( X6 N. u1 [
for(i=1;i<=M;i++)4 N/ n- n$ ~. \! k$ R
{ if(p->flag==1)
! t" v4 @3 K5 X/ e+ a+ k% F printf("\t%d",p->number);
2 J* Y. q( ]7 B5 S p=p->next;
6 d/ i, s; `7 i% o- Y8 w }
% l* @. l8 y0 Q7 t2 \6 g
! e( v7 N7 M& V" S3 k+ J4 s2 e6 _3 I3 [; c0 I% Q4 n) W/ Q. h" I1 ?. l2 l
! [ G, C- {( e# q% B
}
, L! B: S/ L6 I% Y2 c' ]第二种方法:数组
' H: [" A6 O( i/ M' y8 U/ m#include<stdio.h>& O f/ q- a( T% F
#define M 8, n" Z: q# R7 x( S7 v: _
struct monkey
$ n9 \! r" Z" Z8 K9 T& a{int number;2 s; U! T0 R6 \. G( t
int nextp;% V4 J' H6 W) v) D2 q. G+ i* d
}link[M+1];
7 K1 h# G* h& } w8 {8 Q9 s4 W: L- I1 n: J2 ^
void main()! i+ A% U6 T+ ?6 `! ?
{int i,count,h;
" N4 N. \. c" G2 G; z0 `9 t0 ufor(i=1;i<=M;i++)
4 X0 K. A. y* P9 C/ ~3 b; X{ if(i==M)
% ]$ @( [- S1 l( [0 b& a6 f link[i].nextp=1;
* p: N2 ?& R* V else: n$ f3 {0 V% |, e! L ~* Z
link[i].nextp=i+1;( P' C$ j( ~ k
link[i].number=i;
, c! V/ D( r* {, o1 O5 V& X}
" { q3 P4 K5 rprintf("\n");
& u4 b/ N' n* ?9 d- T: G5 Dcount=0;" ^' }* O& ]; ?' \4 J; F) B
h=M;
! p9 x' v' @$ M4 k5 e- O' \1 Q. xprintf("依次退出的猴子: \n");
4 Y5 o% R- ?0 `while(count<M-1)9 @! E# i1 Q2 m
{i=0;! C& m" b1 _5 X" J0 V" u
while(i!=3): N/ q f4 @4 K1 F7 t
{ h=link[h].nextp;$ N/ [# n3 t. s m3 I' i
if(link[h].number)' q6 i4 s& K" N5 V0 D( E
i++;}
: K2 p& v) l0 _1 ~7 `4 a' X9 V4 ^$ u
printf("%4d",link[h].number);
7 w/ L5 F9 T3 I; _+ Slink[h].number=0;) s; o5 k8 W. O! e2 n0 L: u# y* J
count++;: }! @3 p/ m2 i1 I; Q1 A( X2 J" N! c7 r
}
" x) `) O( }& s3 o$ @
/ I" D$ f: t4 Q9 a7 R9 {+ Cprintf("\n大王是:");
$ V8 A V# o. W4 C, `. [ `% K for(i=1;i<=M;i++), D6 _) X/ v, F5 v% q
if(link[i].number)
, S9 t7 `( w; n6 v# M8 h* e printf("%3d\n",link[i].number);. g8 o0 }9 M/ f5 e3 ?
) x9 p4 s. y5 ?' X( ^% g" Y+ Z- ~
} 5 e6 w0 Y/ U( T. l' i, H! P
第三种是普通方法for循环
) F6 y6 V! C, @* }#include<stdio.h>
- b, U2 Q" v# o' l5 e: S' d: [0 avoid main()9 O4 ~; w) k, T- {# [
{ int i,k,m,n,num[50],q,*p;
" V0 [( i: Q0 j5 J+ Q4 v clrscr();+ a( o+ b8 g! p; l, }
printf("input number of person: n=");
) A6 e7 s7 Y" y9 g% K& A) ?7 B scanf("%d",&n);: Z9 w# H4 f2 Q w
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只. \8 P0 B/ W) p
scanf("%d",&q);( [! J7 @' A# u+ U; _, S
p=num;9 n3 \# O! Q3 L- n8 h8 V6 ?3 v
for(i=0;i<n;i++)
' i# D# o4 S( x* g *(p+i)=i+1;
2 d, B! w+ k% j( b. @: @/ Z i=0;0 g8 P2 F4 ~$ n I% o1 ]$ b/ E
k=0;8 ` G5 u2 c; n3 ]$ Z' R0 S
m=0;/ Q: H& ?5 _7 y' n0 j5 y' T
while(m<n-1)
% k Z# x% A, j0 U {if(*(p+i)!=0) k++;
# ^7 N0 s0 b- D2 C4 a. t if(k==q)
; d* }* A9 @7 i% [ I { *(p+i)=0;2 u4 k+ c! \! h$ X6 A" i9 x
k=0;
6 O L9 g1 F2 O4 ~' c+ A2 x m++;: j- S5 O2 ~& d
}
* m, L- n0 j2 _4 F9 D2 K i++;! Z( H) c' y/ O
if(i==n)i=0;1 d5 ~% K+ a" U
}
W$ w5 K# l/ l9 n% p while(*p==0)p++;
. c! Q5 |: e$ L; K7 D printf("The last one is NO:%d\n",*p);
+ p! ]/ j0 _# |( {' n6 n8 J$ a getch();
2 _9 c# u& R4 ]- ~4 @; [: P4 g {, [' S+ M
} |
|