|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!& Z5 { V) k+ {* F, U
这几天我在忙着编一个问题,我用了一种方法编出来!
) Q" T% X- m3 A# }但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
8 }! D6 J, ]" m- }( p: O* |注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 2 c# V/ K6 D; w5 Q" _/ Y- J
- B. i( F/ W+ c
( z, L9 F2 j8 g1 L% c 题目5 t) j2 e: n5 H6 @- f
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。! | A' f6 f, c% @, L" n
第一种方法:利用循环链表. T# g5 U B" e) Q
#include<stdio.h>
; c5 _+ B2 G% _+ ~2 Y#include<malloc.h>
/ y+ |; u2 K: v3 I6 t% e( `#define M 8 //共有8只猴子& ^0 z% Q- Z. ~1 A9 a6 v
#define N 3 //数到3只时退出第三只
4 @1 e2 Z$ c/ u+ R" ytypedef struct monkey; F+ Q4 f( ]" @' P
{int number;
4 F7 h( Y8 E0 M. ? o& Xint flag; ^2 H. R+ o) y6 o
struct monkey* next;$ ^0 \ z9 l" p. R: }0 K, X
}MONKEY;
Z2 O4 y9 P0 B7 C6 |) r5 omain()
- z" Y$ }; [- H5 a& J7 a: V{ MONKEY *head=NULL,*p,*s;9 p* c- \7 `- b
int i,sum=0,count=0;
! r6 C( g7 u! N% d' }9 Y6 Y clrscr(); //清屏
- E+ u4 k+ Z, m, k6 G p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
; R. U& W( I4 @ p->number=1;p->flag=1;
D7 ?( s# N5 @6 j6 M p->next=head;
6 A$ [) a M% b3 J# ? head=p;8 F4 W7 ^& @( V' R9 p" U
for(i=2;i<=M;i++)
+ t$ k- o0 P0 B* p; b( ^' G { s=(MONKEY *)malloc(sizeof(MONKEY));
+ T! K4 ?! V" A7 X s->number=i;s->flag=1;
( [" C: H( F! f s->next=head;
+ V9 Q: r3 A0 |- k% h p->next=s;p=p->next;
& k! G3 d, m4 Z2 B6 A* [ }
% L" X+ _2 r$ b# j. A p=head;
: ^/ F# P0 [, N1 ]( s6 g& c for(;;)- r r7 k+ s8 s5 A& K
{if(p->flag==1)
5 s: Z$ z+ o! y' u6 a+ q* W count++;
# P8 g' T2 z7 M8 w; `# Y9 Q if(count==N)
1 O3 w) _) [2 ^, y3 X1 A$ g {p->flag=0;
* B; L( ]5 }0 D$ Q! [ k/ S1 a count=0;
1 z+ {+ q2 R, X; i& ^7 [, ] sum++;}* M3 |+ y9 y$ ^! o# K0 M
if(sum==M-1): J, J+ I: j- \2 v* P
break;; o' m4 I$ K: h( {+ h8 @' K6 Y( C
p=p->next;: X' e; j* I3 X$ F @1 s" F- p
}) _' b% Q x! g' N
p=
+ _% N( O; v6 D head;/ I/ H/ a& K8 z
for(i=1;i<=M;i++), h& w1 W: f0 g
{ if(p->flag==1)
6 `! X% H% h! [2 e m printf("\t%d",p->number);0 o% i* \! u6 A! g N
p=p->next;1 M; K- G& |, [% Q4 K6 r
}
+ `! S6 Q. l: x$ {' { Y0 l% k* F( c0 D3 M4 V c8 `8 z. T
8 [6 e& ^8 S4 u) V* u2 y7 {: j3 o2 [
}
2 L3 x R/ T& \& ?# P4 o第二种方法:数组
, E) X7 z3 a3 Y- c( I#include<stdio.h>0 l+ ^* W) |5 F/ s, |/ g- H( F0 ?
#define M 8
w. i& r& E H+ J/ Q. w* _' \; r* Istruct monkey8 Z+ ^7 ?1 L/ A+ f2 W1 h7 H
{int number;% }& [1 _. _% J2 Q8 p/ u; H$ D& p, L5 C
int nextp;
; z7 A' R! B: q0 ?+ B& m}link[M+1];
7 [5 @ e V* ^' M" ]! C) _) `8 W4 n( [( m M2 M
void main()$ K( x# s* v3 [7 F, U
{int i,count,h; C; z3 V3 x2 C& u
for(i=1;i<=M;i++)
& C, D( d6 O9 Q1 c/ _{ if(i==M)
) n, b" i2 k$ | link[i].nextp=1; _7 R7 U1 h1 Y- c. i
else
% J: L8 B* f. J$ v k7 r link[i].nextp=i+1;7 W7 \/ I5 q: `% @4 `* d6 a
link[i].number=i;
% r# }7 `5 Q# r3 v- F u}5 Q6 \1 ~/ t& _% ~, q0 m( e! t' F* m
printf("\n");
; R+ m; G9 ], y q' Q8 Q5 ]# `count=0;
- m! C( b2 r+ T7 ~ H6 B1 bh=M;
- f- _/ v$ C* R" `printf("依次退出的猴子: \n");/ M' j7 [0 _# T* g
while(count<M-1)
+ c$ i7 `. H0 q* Q3 Z, I{i=0;
! P: I8 Z" e$ k0 lwhile(i!=3)
) J h- p% x* v6 {! I{ h=link[h].nextp;
4 F; B+ X: K* D* z if(link[h].number)
" W1 i4 L4 ^8 C! _6 p: f0 ] i++;}! k3 {' G5 V; L) k# u4 y- V ]& n% X
: ^* c& Y+ r' D: M! h# p, n& A% J# V0 J
printf("%4d",link[h].number);
0 _) v+ p. } g0 B7 ~ clink[h].number=0;, \3 W/ w" J/ I' r
count++;
# O& M l5 y; L. X. Z}; B C1 x4 A! z" _% l. i
7 H6 R6 U l+ w: ^! N: oprintf("\n大王是:");
& f2 j9 p& K0 h/ C" I X for(i=1;i<=M;i++)' @& u& U3 U$ U3 C
if(link[i].number)
5 j& t ]; Y& ^* z' S! w printf("%3d\n",link[i].number);
; W4 l7 V$ T* {
% Z7 D& b. Q1 m% i
# @) w+ X8 d% a; v) }2 k% D} M1 \# ~. l# A. ]) W
第三种是普通方法for循环
+ s) g2 G. j1 G3 T* D/ P$ k#include<stdio.h>. X C& E" y1 Q
void main()
) O0 Y& U% R, K. o o- Y1 {{ int i,k,m,n,num[50],q,*p;0 D! F/ z8 P2 ], C& a5 q* }* V
clrscr();; W- X/ M( q& S2 ^( F
printf("input number of person: n=");
& G4 C2 C# T6 M% _( ]$ G. g) @) w scanf("%d",&n);* C8 o+ M# H" ~; q" ?- }) d
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只9 G. F+ M# S, ]
scanf("%d",&q);, r$ T. W7 z' ~
p=num;7 I" k/ c# \4 ~ A, k
for(i=0;i<n;i++)
' s1 l: S+ r T; H4 J *(p+i)=i+1;1 u3 E& O0 k) b' }/ k
i=0;6 Y; a! C! G) T+ s7 |
k=0;8 b4 f0 {) f. `7 P+ }
m=0;" f8 O3 W& G' N- }# k% x; V5 ^
while(m<n-1)# I4 \6 [& K u# h6 F0 [# ?
{if(*(p+i)!=0) k++;
: v/ M+ e+ @8 E4 ^+ F. D if(k==q)
7 G# v8 ?% ~8 {( b; K3 H% N. }" z9 j { *(p+i)=0;2 E1 t2 a6 a) V" w3 h f
k=0;& \1 V B- u+ H# E
m++;; d# b2 J* X1 f8 M
}
, m3 P2 i& V) B# ^ i++;
5 n6 O: d- K6 K( Q" P if(i==n)i=0;
2 p! ?0 {0 L8 e) w9 ` z }8 ^/ W$ R2 r5 ~1 j z- u- y3 `( U: F1 o
while(*p==0)p++;/ d9 f6 ?1 G' q/ C2 w2 C/ s1 B; Q
printf("The last one is NO:%d\n",*p);
6 ?* Y& p8 d7 r- M- s" [7 A3 @ getch();
9 w; x# U0 z/ z! N: z
6 [$ `4 z6 r0 C} |
|