|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
7 ? f( N# B9 [( s这几天我在忙着编一个问题,我用了一种方法编出来!0 B: o* B7 W4 ~( t/ n6 a8 v! D1 y
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!" }" n- ?* o% i* _, O2 S) G
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
o- b9 _& t6 U& H& c; Y/ K; x/ v4 a, Y N( Y& P! K3 B
! _2 u9 }6 l* p' e2 F% p+ G 题目& O, `$ f! u: S0 i) `) W+ G. A
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。% |1 M( R, p p# {+ ?( f
第一种方法:利用循环链表
! w% D" n$ O; e V$ \2 U$ J% G- h#include<stdio.h>
: U: P5 a. r ?0 j! t#include<malloc.h>& b, ?$ ~7 L8 h. w9 c
#define M 8 //共有8只猴子
4 M3 ?8 a- W- Y. `, N#define N 3 //数到3只时退出第三只
& x8 P; Q* L5 j3 Z+ @* xtypedef struct monkey
; b3 z& v7 K! E0 O* c{int number;
; K( c4 o" [1 [1 Y+ o3 vint flag;
+ }9 S/ O9 `& e& v! j5 S9 sstruct monkey* next;
6 Q3 g4 c1 L0 c! h1 V}MONKEY;/ g' |8 a9 z6 X' T" m
main()
8 _# M" \4 U9 {6 W' O+ R7 ?+ y, I{ MONKEY *head=NULL,*p,*s;5 u: K! Y+ |# _9 _; c* b8 \
int i,sum=0,count=0;1 ]) }$ h# u9 ~
clrscr(); //清屏
" y4 m2 _- G- Z! } p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
$ x9 y$ l% l* X6 ?" c2 } p->number=1;p->flag=1;4 ^/ h% f8 P0 f" \5 k
p->next=head;' A- K+ [9 B- Y0 ~
head=p;
' \1 I- y( V4 y. B% H for(i=2;i<=M;i++)6 I/ `4 [" n5 }
{ s=(MONKEY *)malloc(sizeof(MONKEY));6 c2 O5 I8 _' S% O+ W. J
s->number=i;s->flag=1;
; `) h4 z; P, T1 m0 A s->next=head;
5 X) L2 Z; g% G p->next=s;p=p->next;4 e0 u7 L) w, \" e, i
}
2 J% d/ L6 W+ T' g- ` p=head;7 N% ]7 d) [2 d+ }; L) k6 e' s( g5 d
for(;;)
/ i0 R+ F5 f1 P, m {if(p->flag==1)
8 Z# W9 g3 Y& Y' A! y$ T" m/ N count++;$ P4 u3 Y7 P7 x$ S
if(count==N)0 _0 R4 c! f m5 p' |& Y( v
{p->flag=0;" j! F- [7 x. l5 Y& l; L# @) q: B7 Z
count=0;
$ n1 D/ A0 J5 x0 f! s4 i$ v0 G sum++;}$ W- ]; z/ U. n& b+ P% ^
if(sum==M-1)3 m1 T6 _3 R% o' g* c
break;6 Y8 E, r# v) z) F) k
p=p->next;& t7 D# \, q) E+ Q9 p
}
$ \, e( u- [$ {( a p=
& z& t/ q8 u3 } head;
' K1 v# V7 p! n" E7 n$ ] h for(i=1;i<=M;i++)
9 n( F# B& w4 ^2 c1 \( v { if(p->flag==1)
0 r6 V! @0 L) j, N printf("\t%d",p->number);
/ h0 b8 A5 c" @4 {$ | p=p->next;
I. |$ B: z6 h, w$ {+ ^3 z }- y' f2 n* R) N/ U1 [4 P( K' }/ A
4 S- Z$ K2 w# ^, n
) N& k* @& v( J! o* n q1 ~
5 X9 u! |% k0 t: ]: ?9 G}
8 w0 T5 B% {2 ?第二种方法:数组) T/ E/ M# n. h( R
#include<stdio.h> X! W/ n# J2 K2 h$ y, {
#define M 8" ^0 ]9 Q6 H6 A+ P$ L
struct monkey! k: L" [5 m4 u# W# D2 l& g$ j: @& e) _
{int number;
% \8 z* w; [) Q, H+ Qint nextp;4 L: t X( D4 K# j4 R c* v
}link[M+1];5 e9 g- Z; r* p$ u! C- {4 O: @
c) o" i5 `$ ~
void main()
& O- Y, g' r) D8 m" A, F- q- B{int i,count,h;
/ B; V$ J( g# E0 G4 N9 R* m" efor(i=1;i<=M;i++)7 m2 b( E& T9 i0 ~
{ if(i==M)
( ^* ?3 w8 ^+ n link[i].nextp=1;% I! O1 [! `; \: I: z. e
else
( t" |' T: z3 y& E: l5 n; F4 C link[i].nextp=i+1;
1 d# V2 y" M% A2 s link[i].number=i;$ a$ x$ x+ j& G/ ]
}
7 S2 u& C/ _; G6 L% l% Q2 Iprintf("\n");( p2 k. y$ O9 K' N v/ ~
count=0;
' D6 {5 F' d" x: Z2 E, x3 }* th=M;
~% K9 Y+ A8 P5 b# b7 f1 nprintf("依次退出的猴子: \n");
: }7 ?/ w3 \/ ^+ v5 J/ }8 Dwhile(count<M-1) _$ R7 M! N) J% x) w: Z+ v
{i=0;
7 T1 t) Z* j/ h( z( H4 Rwhile(i!=3)
" E0 ^$ I: ?8 I+ u' @- a8 S{ h=link[h].nextp;* E% J- E# I5 l- u% T" _. t
if(link[h].number)
' Y6 ^% @2 f6 Y, I& F5 e i++;}/ t3 h+ S6 G: q0 |
* C2 j: q. J5 K" h6 D/ ?$ H% A oprintf("%4d",link[h].number);
, Q$ a9 X" \% \$ Elink[h].number=0;
3 R) p4 j4 t) t% Acount++;0 H4 O: i7 H _+ ~8 g9 |, U; N
}
3 r% K# _3 e, C
8 ]4 i$ ]: y8 }+ \printf("\n大王是:");4 ?: C! j8 W# v7 e* d
for(i=1;i<=M;i++)' ^' A( \3 ~2 i+ [1 g, t
if(link[i].number)
$ k& q/ c9 Z' V$ k* _" K8 ~ printf("%3d\n",link[i].number);
" X9 X# P1 P% L+ V9 E% u9 M1 L' Y4 h! L8 P/ g9 J
5 q" @8 \9 [ Y% m; U( l}
" S5 ~% {; M8 F: i% v% j. I第三种是普通方法for循环- j8 V5 h& {; p$ a
#include<stdio.h>% ^* X; J7 Q/ s" i* s+ L: K8 y
void main()* |5 ^! \3 e! ?5 K9 Z
{ int i,k,m,n,num[50],q,*p;
6 v) z9 F \# @ V9 j clrscr();
2 X3 v, x* g b5 \: T7 d4 P printf("input number of person: n=");7 Q) f$ l: r. V9 n7 e" N: C
scanf("%d",&n);9 X5 O* I$ }4 s2 e- m) }
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只! C) D W1 v4 A' w$ K8 Z
scanf("%d",&q);9 q6 @1 q. K1 p' W& J$ A( B
p=num;
8 }) }) L! d2 Z% E3 A2 t4 ]& A for(i=0;i<n;i++) U$ `4 y4 e- |+ l
*(p+i)=i+1;" u. N: B6 E) H% c( Q# X( \
i=0;
; {5 v7 W$ V+ E& _7 t+ m- w L k=0;, z$ N* C* @4 V7 d. O
m=0;2 E1 P9 h7 V; Q+ G" h0 ~2 Y
while(m<n-1)
5 o; \* J1 c6 V% P# d9 a" v {if(*(p+i)!=0) k++;3 \7 l2 N$ a) h2 r3 S( b* o
if(k==q)
: Q( ^, N; e& c8 N) k+ H { *(p+i)=0;* C, _+ w- e+ o4 i6 W$ I8 W& ?- y
k=0;; l! ]" a/ C! F$ e, | z4 g
m++;+ O; k6 g3 H6 `* d
}
4 e. d& ?* g& H8 i6 ~& b e i++;8 R( C- A7 R: p1 k6 X, @* Q
if(i==n)i=0;9 k: P+ L' D5 Z
}* Q% Q0 C; [6 `$ ]1 }( Z
while(*p==0)p++;
; S3 K6 g5 J0 _$ R/ f5 \4 G2 M printf("The last one is NO:%d\n",*p);
, W, v4 G {$ [! c getch();9 x8 `/ R- y6 b) \3 x: y! @7 n
M8 \) p3 D3 A" @
} |
|