|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
( I+ W( n/ x$ d5 h# k这几天我在忙着编一个问题,我用了一种方法编出来!3 d- s4 ~8 |/ E, R% s# G" z( z
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!+ u$ v& ^% R" I& B
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 ( @/ O" @9 _1 _! V
/ o' r; r. n- k8 S7 D7 ^
4 m+ ?* {8 \# d/ S5 [2 o 题目
) ^+ Z- \3 I5 e4 o4 X) y7 Z山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。/ E0 f) `2 M C* [: b/ T
第一种方法:利用循环链表
/ k( N5 U' Y1 {' t- }& w#include<stdio.h>
3 C. e6 G4 I; }: _! L#include<malloc.h>
, [ E, Y* R4 J3 {( n5 U6 @#define M 8 //共有8只猴子: f8 K( P, s" p1 K4 _, N, Q
#define N 3 //数到3只时退出第三只/ X& z2 D$ U3 Y4 N) a. l
typedef struct monkey/ b/ W/ g/ Q) A, r! _) {% D
{int number;
) N- m: w& B! dint flag;0 I# G ` S A3 S' E# r0 O
struct monkey* next;) D7 N! d Y4 I, @
}MONKEY;
1 R0 L( E _9 @, m( Xmain()
5 r( s& A8 |/ T+ q0 @{ MONKEY *head=NULL,*p,*s;6 c) @% B& n/ ^( I4 F* b
int i,sum=0,count=0;
$ Q3 m+ |/ G+ m9 ]$ w |4 { clrscr(); //清屏! B3 C2 b0 o) {
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
" Z! k& W- ?9 m+ O p->number=1;p->flag=1;
8 w- h# |" W4 u; l4 U. X p->next=head;# q0 \4 j4 t- s9 j7 @
head=p;6 H1 H; r, g4 o0 v
for(i=2;i<=M;i++)% [& s6 G; W7 @+ Q$ k
{ s=(MONKEY *)malloc(sizeof(MONKEY));
$ L! p( p( R8 k2 q' H8 h9 Q. | s->number=i;s->flag=1;
: u+ [) f3 i+ v8 s( J% e3 _, K s->next=head;4 D/ g" v6 S& s
p->next=s;p=p->next;
" [" j- M: x- [; |4 @% \ }* |) l$ P- k- y
p=head;
; p4 V# y2 |; E% C8 T0 w) O- R" C$ a for(;;)
( L; g7 K1 \- j% z3 A$ ? {if(p->flag==1)
/ S* U" d2 x$ V/ [: ?( p' u count++;. \ s$ ~+ N4 c/ \
if(count==N)
) X3 f% E! P7 r+ E: T$ z" ^$ i {p->flag=0;9 A( Y: ?( X4 x$ i* L
count=0;
- q7 J3 ]/ ]* i. ^ sum++;}1 [* w2 ]" {8 T3 P& r' K1 {0 ]
if(sum==M-1)
5 l+ d9 J" |8 d break;
0 I: V. v' n& w p=p->next;
4 ^3 V5 {9 y( \% M. J4 i. D }
' q3 l O. |; n: o, ` p=1 L* M1 M1 \6 b0 ~+ K* @; ?
head;
" Y0 ^% [! [1 ~( ?# n for(i=1;i<=M;i++)
% q+ U4 l8 @4 d& V) v { if(p->flag==1)) M1 X0 a( n. o0 W
printf("\t%d",p->number);
) y: j2 G3 P, s) z p=p->next;5 y0 [5 u+ c) g' V4 V& {( j0 l0 g
}* I; U/ n% l' F: |
' Z o# C" t7 J1 M4 n+ R: X& M/ p: X, @/ s3 k9 W9 u- c
, U6 z) _- t% `3 G' f} `& j/ e1 M$ n2 }' ~$ W& S4 m* I. q
第二种方法:数组; t8 N) L, C( @+ n
#include<stdio.h>' Y) A$ x9 u! i' z: r
#define M 83 U# d, m( E- F# m6 x1 Y" h" v
struct monkey
5 W3 w- U z' U7 H& r) v6 k{int number;3 C, h; Y5 N! C( D; t
int nextp;
& S: T) `& [2 T! W& G}link[M+1];: N$ ~ i0 | f
3 B" V: v/ N( f! Q$ w
void main()
0 t; J/ X- d9 B! F7 v{int i,count,h;
9 \7 m+ G% t& ^for(i=1;i<=M;i++)7 s3 ~0 I0 y3 W- o% y
{ if(i==M)# E/ {: c R- q% G
link[i].nextp=1;0 u/ J0 Z+ x* q% e
else
# z- p3 l# U8 E8 ]% v link[i].nextp=i+1;- s; C, B2 X1 ^$ J8 e7 m% Y% f
link[i].number=i;
6 }$ i. [% Z" b, \6 Z+ A) }7 y: X}
+ N& r! Q5 Q+ {& Z mprintf("\n");
) c3 E: p! h% e3 ncount=0;. _- o9 w- _4 P0 D" V/ B, ?* b
h=M;
/ e! Z% i7 {3 g. e% |9 b+ a; ]printf("依次退出的猴子: \n");) L8 g9 ?- ~) k$ T- K
while(count<M-1)" t+ f' S! _! q
{i=0;
4 J, R$ B8 ]: G' P# h. X- [while(i!=3)8 @+ ?. O! Q( B# m
{ h=link[h].nextp;
8 {- \3 T H' g* i$ X6 b9 Q- l% e$ } if(link[h].number)
0 w. q, j. q8 f- k, X i++;}: J, Q V, {( X( `; c! [ @
; c3 Z6 r" l. z, k: xprintf("%4d",link[h].number);
/ q* n K! A3 Z9 { U# Blink[h].number=0;$ z' L* P4 X! T# O& B+ Q
count++;9 C, }; c" j% ] o% @
}
. S2 y/ u( O& _0 U" H5 c
1 p/ A; o1 P9 xprintf("\n大王是:");
) O! f* D( z$ V, t/ L2 c for(i=1;i<=M;i++)
% } R; l5 n( V7 M if(link[i].number). l4 I9 K# E; ^5 \5 c
printf("%3d\n",link[i].number);6 x3 o# s1 t8 H$ m, J
6 z W. f& U( u# @' m/ R; T4 K) J( e) q) W
}
2 w( ^0 ~% E0 d" p$ z第三种是普通方法for循环. U9 M5 s U, T8 Q* u- ~
#include<stdio.h>
8 C% D0 C0 R/ t) C6 t( lvoid main()' q) |0 a1 j' ~ f8 G
{ int i,k,m,n,num[50],q,*p;9 @9 J. _3 i: w/ [. S
clrscr();
( L0 g' A( f& j, L( q0 u printf("input number of person: n=");
0 |3 _5 j2 H& r; j g scanf("%d",&n);
r3 S4 e" M% R# y# Vprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只7 x, m. b9 | z* L4 k1 K
scanf("%d",&q);
1 f6 p+ W! x9 y) J1 A! T/ f( y p=num;
& e# M$ j3 w2 N for(i=0;i<n;i++). E5 ~+ i+ `% ^/ s/ M
*(p+i)=i+1;
6 ~6 y- S7 }5 O. {+ ^5 ?$ e i=0;
. B1 F/ i# _( Y, X4 y7 y/ R k=0;
, ]! L2 A& [6 N m=0;6 U( L# b1 g$ T) h% _0 K- z( }
while(m<n-1)$ D1 K" g0 ?. S; n: A4 r( t
{if(*(p+i)!=0) k++;
/ B# B' \ |5 Q if(k==q)
: ^) @7 z# r# O, E1 s { *(p+i)=0;
! W4 }$ ]3 ?, u k=0;
& c4 n0 C8 [- v# ~8 }9 c1 t5 Y; Q0 z m++;
/ {5 U" S# j" a! a* I! m j& d }! `8 I/ z; O0 Z" k. Z$ k, x' [
i++;
( S& a& o( E# N4 V if(i==n)i=0;
& W/ M) E1 w! A0 F: _8 {$ _% M }' {5 j9 g1 _( e: F% c# t* p
while(*p==0)p++;
" w8 B2 l& X" O/ \. i printf("The last one is NO:%d\n",*p);$ R' b$ u! d# a
getch();2 V( g6 h4 U6 k) T0 M
0 }. B/ z& Y/ [7 B( @3 Q; e
} |
|