|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
×
大家好!9 v& P) I# n9 K: _
这几天我在忙着编一个问题,我用了一种方法编出来!
) s+ a, X, ]1 Y' N但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!* ]. l& L) c$ \1 V2 |2 R! z
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
1 Q9 N6 K' l$ O0 a( i7 r0 s8 z# i% A
" w/ R4 X/ `; f* x' f0 O0 P6 D9 d
! [8 Z& y8 h) P1 H, o( n: K( o7 z 题目5 h# G% I. \4 c& J- Z& Z5 H
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
) U3 V2 Q; M, j. Q3 R8 @第一种方法:利用循环链表
" l7 |4 H1 I( k5 V7 c#include<stdio.h>
@# r& D/ c& L( `/ G# z#include<malloc.h>
8 ]2 D/ t* A# q, I" p- h/ D#define M 8 //共有8只猴子, J) E3 }4 y7 M+ o
#define N 3 //数到3只时退出第三只
! e: c2 e* c4 Ytypedef struct monkey
% y# e8 x" ~6 x9 t9 ]0 e0 Y{int number;
1 C% @" V( g0 r. ?2 ?int flag;4 J, y0 g V5 q/ U
struct monkey* next;- I3 v9 {1 D, B2 h& g
}MONKEY;
+ [& x. C( q8 O6 n$ @. Ymain()
% X& \% C. X2 c4 |; L, x" j{ MONKEY *head=NULL,*p,*s;; O: L* u- |5 I/ J4 E" r9 C
int i,sum=0,count=0;
7 G) r% ]8 D4 Q" ^7 ~% K e1 W2 q clrscr(); //清屏- n8 G+ G; L" E! Z% ?, k) Z; E$ }' G
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
- V" |" O$ e. D7 }+ g8 [- V p->number=1;p->flag=1;
! }3 B5 u) ?6 O8 F( g& C; _4 e' k p->next=head;+ {8 h8 |( n% w4 e1 [
head=p;) |2 u: j( e" P" M! \
for(i=2;i<=M;i++)
( H$ C8 [9 j! y- z { s=(MONKEY *)malloc(sizeof(MONKEY));# A. v6 f8 ?! p! Y* k# r; Y
s->number=i;s->flag=1;
& ^" u2 @* L+ h } s->next=head;
4 `5 u6 Y0 X0 N; j* t9 m p->next=s;p=p->next;% |+ P5 L4 g5 t$ N* h
} Q9 U( M. N" I& ~
p=head;* G' U; I& ~4 `; l
for(;;)
, I1 Z# F$ H/ }& _ {if(p->flag==1)$ e1 F* ^8 T% d3 J+ _9 @6 P5 T* r. ~
count++;. B% [2 H( |4 I/ T
if(count==N)
( ?2 o! j% k- \ {p->flag=0;: r6 |, @( g" p; A
count=0;
! u" G9 K9 a9 T% v6 a @ sum++;}& [/ z$ S$ D9 S8 d
if(sum==M-1)
- J$ @3 z Q+ @" ?' J break;+ h% a N% e2 U- J; b2 j& Y
p=p->next;) S; i- N) g% s8 f$ a2 p! Y4 N1 U
}9 b) ` e. A6 U
p=2 a' q( k X8 L) T
head;, I# [4 d. h' m6 J3 Q
for(i=1;i<=M;i++)
$ ]. v9 D& r) ]! h" { m { if(p->flag==1)
! S: b; h/ o* u printf("\t%d",p->number);
+ ?) }2 ~( O5 s4 r( ^3 U p=p->next;' l8 J0 U0 U0 q% y/ c, a
}. l3 B _/ ]! U/ e
" L \9 J; }/ o6 B6 k K% r! v' r" e; C
, Z* w; h9 s& Q$ t2 N% b
L( R; k$ g' ^9 C) R. G
} ) S1 {; A/ d" \: Z9 X3 W0 w
第二种方法:数组( s+ m# L# n. U0 d+ x
#include<stdio.h>
( h, `, O9 W: W% O6 A#define M 85 A; r: k% D! C8 Z
struct monkey) X0 f a& C& K7 l
{int number;- v' z/ S5 o8 d) f$ Y
int nextp;* }! L: A/ Y+ Z1 Z0 T. K* K. ~
}link[M+1];
$ g) E; A( S) \: E; y1 P; h5 I5 W- b, o1 m3 a6 y" j L
void main()$ U' s; g, O; A5 B3 v
{int i,count,h;0 U3 ^1 ^* D$ j( r
for(i=1;i<=M;i++)
- j3 ~6 {3 V+ a$ N{ if(i==M)7 y- L% F" ^& ?/ Q3 n7 T
link.nextp=1;
+ }+ p4 x& g7 u! {1 A/ F% u& w else3 g& t- E. U" I5 w" Y
link.nextp=i+1;" Q5 H0 D' { F" ^$ ?& U
link.number=i;# n8 [- ^: ?: T- t
}" c% d/ x8 |# X+ S8 K
printf("\n");
9 e$ w: ?7 e7 A J# K0 Jcount=0;: ?0 R, g4 Y% E* v
h=M;
6 C% N8 b: R4 D( f* p& Oprintf("依次退出的猴子: \n");0 D) v z+ X1 D3 k( p( {
while(count<M-1)
7 ]/ y7 N w B: b% I( o3 B{i=0;
E$ \+ l8 N. Z1 Wwhile(i!=3)
$ S) r- O% c. G% \, {. e6 q{ h=link[h].nextp;
' Y6 |- P. t2 v1 F3 h: Y3 f if(link[h].number)! v, l5 G8 V+ O% \! ?
i++;}
7 p2 u1 f4 z7 ~; S& k1 b4 d) `9 N
printf("%4d",link[h].number);% ~8 E5 I5 M6 k. O, ]
link[h].number=0;% h' N4 L1 O4 Z) P2 ^( `5 ~
count++;% G& Q" T4 i8 P' N+ @4 d/ H
}: B" Y0 i5 V9 N$ l' H( T7 J
+ A/ b* l$ Q7 X* A& F! n0 b" D4 ]
printf("\n大王是:");" l' L0 w3 y% ~; O/ `
for(i=1;i<=M;i++)
' M9 }9 @, L3 V. }- Y# ~ _ if(link.number), e) c8 e: ?/ l3 x2 R4 i2 t6 }
printf("%3d\n",link.number);
2 P2 C% H4 F) f8 {8 l
1 _" y2 l+ S$ M5 N% {8 K4 \6 q
! s7 t- |+ T# P4 N} / b) G0 e* j; _3 @* @+ x2 `
第三种是普通方法for循环
/ Z; I H6 I& H f% ?& D) i#include<stdio.h>+ O% G* F( U5 e+ H# l/ o5 E5 E
void main() v0 f' L: S4 ?5 t6 s" |# Q7 @7 c
{ int i,k,m,n,num[50],q,*p;
7 g5 M2 L+ }; L clrscr();7 b3 S- r9 @4 u6 P
printf("input number of person: n=");
$ R% q7 ~) x9 ]/ ?. T$ Q8 g. c scanf("%d",&n);
- n( T7 O' [1 A: ?8 `) x5 xprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
! h! P. \* h* S* ~+ C/ z scanf("%d",&q);
, M9 K( u) k: B4 K3 a8 I6 Z p=num;" a7 _6 h% Z: u
for(i=0;i<n;i++)
* F* f$ q- k& m/ ]# q4 y- a. u *(p+i)=i+1;6 V1 }: h1 e/ q# }; w# Z: {
i=0;, O2 R" c! s2 n7 e
k=0;' K" u+ g. ^/ E+ v8 Y
m=0;4 _/ h. b# D: ` l6 e& b( I8 G1 j
while(m<n-1)% R4 t6 U: n( z
{if(*(p+i)!=0) k++;
% ?# j8 ]1 r- m2 b* O' ^) G if(k==q)
' {& E6 C' D; Q) u, F: [ { *(p+i)=0;$ W4 O2 O6 b4 Q5 u/ h( P/ ?# |
k=0;
i9 E- ^- m/ w1 _. K m++;5 E- }8 s0 S/ l. ~6 o& z) U
}. v, L& d: G8 _/ Z
i++;
7 n# V3 @/ [& D( J if(i==n)i=0;: S: D% E5 u5 ^9 a2 E
}
/ E9 Z2 E) A$ ]$ x. } while(*p==0)p++;
3 I9 E) A4 _; G3 k5 Z0 K printf("The last one is NO:%d\n",*p);
' f; g% B5 Q. ~3 y getch();6 b5 m) p6 h1 u% t
" {$ F3 {8 O& P3 A5 }& z2 i) t, e} |
|