|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!7 }& ]% \ d$ j& A) `. J9 |
这几天我在忙着编一个问题,我用了一种方法编出来!* O- g, ?! E6 m2 a
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!% e# D! x( B6 Z1 ~' w
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
* a( S1 c" J* \+ Z, z9 Z C% T
- S9 A3 q5 b4 d G6 r
题目) S* y G9 i3 _ _, {9 V5 D
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。) o: J) t2 m2 L7 E; C, i
第一种方法:利用循环链表' }0 _. R* a4 w5 E+ A5 t3 `
#include<stdio.h>1 ~( N) Y! B. w2 y& u/ g0 Q
#include<malloc.h>& J5 M1 F. j) h7 j) r
#define M 8 //共有8只猴子. p* W* O' x% J& a- M
#define N 3 //数到3只时退出第三只: t3 w; O4 g* Y1 _7 s4 y! O [% A
typedef struct monkey
9 l$ e( i( d; v; U{int number;" z7 W2 a6 f1 g v+ \- h
int flag;
+ K2 I3 j) r1 t. X! L n& }8 K! I. bstruct monkey* next;$ q- I1 x5 {4 f' S$ ~5 s8 ?
}MONKEY;
9 [. h$ e" l" t* emain()$ {6 F' j2 N: |. @3 Q9 {7 _/ h
{ MONKEY *head=NULL,*p,*s;1 O/ o/ B- x) \# v
int i,sum=0,count=0;
& e4 I- p/ n: f, X* f clrscr(); //清屏3 `& [* B0 {* u. {1 w
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
+ ?4 [* g9 D) `' z p->number=1;p->flag=1;+ e. ~: H: _# k" T! d
p->next=head;
) T" m& e/ _, q8 A7 f head=p;
: O$ R( ~, V: T: x1 S) @1 W for(i=2;i<=M;i++)
' q4 y3 O) @2 M5 d { s=(MONKEY *)malloc(sizeof(MONKEY));9 j% g1 u% a5 V1 R
s->number=i;s->flag=1;
8 P) G9 p$ c2 C9 I. r- l* M9 K s->next=head;
/ H" h& W; t5 g2 M! r8 M: Z p->next=s;p=p->next;; t' f; B4 w0 x% ^, F+ o$ k
}
, \8 X0 Y. z9 \8 i% R p=head;! r. Y% _1 t3 `9 Y: ~3 Y7 r
for(;;)" b- h. p( X: H+ Y0 \9 X
{if(p->flag==1)
, a& y# t$ n O% w count++;
% z3 ?+ L* ^% J- w/ C- n if(count==N)
# e0 y3 T, J& A* \$ G& x; @ {p->flag=0;8 B4 I& d2 F; [4 g4 j" a& _
count=0;* R" H$ ~9 G- M
sum++;}/ L) }& G5 Z2 A/ ^5 U1 q; j
if(sum==M-1)2 j: T3 e, ]- v) Y6 C
break;/ x$ T9 l% `3 b3 ]4 F0 i; O- V
p=p->next;
! Q7 P2 |9 c6 y: i, d. b5 `3 { }
( [1 _5 L* o( j4 n9 b p=3 C' e$ ?+ V5 h6 W9 ?7 G8 ~
head;4 }0 ?3 S# }4 L( n: ^8 p. `
for(i=1;i<=M;i++)
# @ `' ]. O' h( M- H9 ? { if(p->flag==1)( J; C" ]3 y0 f' ]
printf("\t%d",p->number);% p, v. l! G1 r8 v. y0 T! J
p=p->next;. j9 }% y& ^2 P0 }: g
}
" o" J8 e9 w4 G5 ?
- Z8 o5 Q# P$ @4 ]8 J& S+ a
8 L- f* U* t) W) S6 O" C5 i( [- M8 y7 B' ?$ M7 q8 Q
}
: a' f0 ?* C Z8 g; q: A. a! X第二种方法:数组
' G+ U5 F2 p# o3 j8 O. a' x4 n* J0 i#include<stdio.h>
4 f, i" s% x5 h; b4 H#define M 8; f( _4 ]% w8 O/ g1 H" a& v
struct monkey
, h8 [! A- A1 Q9 X. {{int number;
& K/ }# Z& I8 \! yint nextp;
. A7 i% U- H6 L3 n9 n$ _}link[M+1];1 w: k/ P" @3 U$ T$ z! E
$ W5 x D. u7 V: o2 Mvoid main()& \" b7 F7 I. G1 t) y4 ]
{int i,count,h;7 P% r8 S& Y C! z( b+ F/ K4 i5 ]; c
for(i=1;i<=M;i++)
' u* @/ J4 P/ m8 R$ D+ h$ ?. Z; g{ if(i==M)
) }& W6 N1 B1 Y link[i].nextp=1;
5 d1 h: P1 N; u6 F else
& v* N7 v0 k) H- r link[i].nextp=i+1;
$ H% M0 S( i% D link[i].number=i;4 _) C n. V. m& Y4 i
}8 R1 w. ]) M8 R6 p( t/ g k
printf("\n");
. P* h! v" \% I# j+ b9 B+ l9 |1 Xcount=0;3 B5 Y- f6 R( j8 Q% z. [
h=M;
. M* o8 w/ u/ P" _3 \printf("依次退出的猴子: \n");. c; T! g7 @4 Q$ |3 l
while(count<M-1)- f5 U. t, a' i/ J
{i=0;
1 `4 A6 y, g! R8 Ewhile(i!=3) A& d p' k1 e3 A; k
{ h=link[h].nextp;
# Q: A! @/ q! g- x. ^" A if(link[h].number)
) v8 Z6 ^( U$ R; B5 ]; t3 ?7 r2 J9 ^3 h' g i++;}
+ ?1 r. A! j8 w9 c
- c& u( b3 Y0 ~- A; U) s5 Lprintf("%4d",link[h].number);8 T3 n" }3 I/ {- i
link[h].number=0;8 [+ M ~7 v L
count++;
. }; M2 ]- ?. h9 a* n3 W- |7 G+ R5 ]}- [$ r3 d' W% D7 H* D* F
* g1 s2 y% @- z9 {0 q
printf("\n大王是:");) C5 D7 n; W; A5 p
for(i=1;i<=M;i++)
# S$ _' L( w& h3 c# {/ Z" u2 A if(link[i].number) c8 z8 T5 k/ Q' }' A' A
printf("%3d\n",link[i].number);
' m% K. p; t$ ^% K6 ?; k1 M* b
: U- L# t) _( M- R) f4 V; u W) g8 z% c% `, L
}
- e9 N3 o! {1 r$ \( C第三种是普通方法for循环7 @: d6 T: z! B D
#include<stdio.h>
; O. m$ C/ @2 bvoid main()
7 C. u0 h1 r" L) }3 \" G{ int i,k,m,n,num[50],q,*p;
+ Q1 ?. B& |0 z" h clrscr();
! o& j) Z9 w( T$ g ~ printf("input number of person: n=");- n7 ^; |7 W; h5 V
scanf("%d",&n);5 }8 d: ?0 E" d9 c: h$ q
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只$ J# @6 x/ k% V; g0 z0 J
scanf("%d",&q); E) O. S, N( @( t6 H" T. C
p=num; ?# s2 T, b) [0 R: a$ K" y
for(i=0;i<n;i++) C0 a$ X$ U' O1 f
*(p+i)=i+1;
: Q& ]. b( h+ k7 [) r i=0;
* n6 o/ M# G3 \! M9 q k=0;$ m! g% F7 x# Q* P7 l" w m( X0 a
m=0;
! b/ T( l$ R' H9 _ b1 p3 l! d while(m<n-1)
. ` c, h! J: ?. z( t4 L {if(*(p+i)!=0) k++;
1 o2 U3 [7 m4 F if(k==q)& s$ S3 e' A' ~
{ *(p+i)=0;+ y6 c8 B* Y: X4 |! `% I
k=0;# T8 z8 Y9 u& I
m++;- p1 j$ C+ H/ D' ]6 W1 D0 p
}
. B' V+ R6 f! Z9 A6 E i++;" b Y5 r. b+ S- E9 Q) r
if(i==n)i=0;# f* G& u8 X& }& ]6 p; d3 ]# n6 I) Z
}
: {% P+ G; C x9 l) G4 n while(*p==0)p++;
8 W' I3 x0 \' d6 z9 ^4 `$ j2 P printf("The last one is NO:%d\n",*p);
$ v( P/ r9 e, n1 b getch();
- z, s3 o& [$ I; q3 {) o
* `6 ]( Z$ V4 m% D3 s9 [} |
|