|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!' ?8 t( [4 _3 }
这几天我在忙着编一个问题,我用了一种方法编出来!1 H2 |$ ~$ U, v
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
- l. F: I* f1 R! N V$ @! p5 r注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
+ G2 g7 D1 g5 U3 j+ i# R: {# ~
: o& e2 t$ y% z# L0 H( d
, b2 K- H7 N, o, F: x+ q 题目
$ m" a1 ]" n3 Y# v山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。0 V& F9 Z2 K, ~% ?
第一种方法:利用循环链表( o- b- V4 v' Z* h$ `
#include<stdio.h>7 e+ i4 u# f% i6 ]7 D
#include<malloc.h>+ W/ j `% Q2 C1 T4 l. N5 K
#define M 8 //共有8只猴子
: T2 q9 }7 U# j#define N 3 //数到3只时退出第三只
6 `) L# n6 c# n |typedef struct monkey
/ `: h" [- R$ \2 ^{int number;
+ R, Y" \9 E/ ]7 d! J6 L" Wint flag;" A0 M$ }% I4 i' e( P
struct monkey* next;
7 Y5 r2 A6 Q% n# A6 d+ }}MONKEY;5 ^$ S+ r6 f1 K2 b* S) l
main()
( q' T! K) p( v. \- ~& l{ MONKEY *head=NULL,*p,*s; K) J2 E- K7 R# `2 c% E
int i,sum=0,count=0;
1 x5 w( L% l! _ clrscr(); //清屏
; e( n. v* w" d/ G p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
% F- X* ]# u2 d" [* y5 M$ u p->number=1;p->flag=1;0 i) J1 E& ~ j% U. l$ i& N
p->next=head;
& h7 T7 x( j8 N8 m) Q3 L2 o head=p;! O( K9 I2 X5 h* M3 Z
for(i=2;i<=M;i++)
. _9 w6 R$ k" V; j0 G2 P { s=(MONKEY *)malloc(sizeof(MONKEY));
: ]" }# i( D6 V. w s->number=i;s->flag=1;
4 l5 a% l& @8 S. ]2 S! s s->next=head;
" E$ p# [* s( n, K% B/ S2 h p->next=s;p=p->next; T) s2 \) y( ?( v
}) ?& }, u3 o8 k1 ? ] l
p=head;1 m$ N2 H) I7 p4 l- F, R
for(;;)
! j9 p( o2 ]# a2 N {if(p->flag==1)
/ `. ]* Q5 h- w" K# u, \ count++;* E3 Y0 t% _: x- g' f# D
if(count==N)2 S( Z7 A$ n, c, p0 M
{p->flag=0;
& N4 n0 ]$ Y9 Q" E/ x$ z count=0;! y! h: G9 h* y5 k c
sum++;}4 |/ ^9 Z& i# Y- L+ w2 ^8 p! }% Q/ c$ ]
if(sum==M-1): j6 z) A2 h' ^0 w: K; h" M
break;; M, q. A+ z* q/ u
p=p->next;
) c B9 F, t3 | }
O6 f3 a7 b2 b5 _) [6 s! h) m+ r- J8 P p=+ |1 }6 g7 D% E
head;
; w- J$ b. {" u' ]4 v5 s for(i=1;i<=M;i++)3 O; w: f5 |4 L3 O( R# u0 R' Z
{ if(p->flag==1)4 o" T K/ {5 s+ r+ r
printf("\t%d",p->number);0 L: d, t* i; ?3 q
p=p->next;/ ?! }2 e$ b4 G v
}& t D5 M8 G# b+ ^
3 r' m" r# ?) U6 O
* _, D& g% D, \6 @2 s. V6 @, g$ Q5 \3 X( l% ?1 b; @
}
/ B) F" b. v* x第二种方法:数组
6 ^5 G, X$ A/ A3 H#include<stdio.h>
. H a* z9 `- J, Q/ H4 ?* _# J#define M 8' P. _5 u" g1 p$ B0 k& Y
struct monkey5 a' ?4 O3 M& R9 O; f
{int number;" Z8 Z% N6 M( k4 S$ D
int nextp;
; h4 M4 w3 t6 n! J}link[M+1];3 |7 T j0 M! l! W' A( D, s
) v4 z) u, d9 i: f5 b$ T W
void main(). |" B3 _3 d/ c! \4 o6 s
{int i,count,h;
9 `) a- h5 Z* z- [" Mfor(i=1;i<=M;i++)8 o2 F9 m9 p* L& B) s m9 t; n
{ if(i==M)
! ?* T) |. ]6 P: }9 Y# s, J link[i].nextp=1;
- ]! U( S3 ^% {$ Q else
% b: `3 [3 a, U9 H% I' q* i q link[i].nextp=i+1;2 `6 P5 \& J$ U3 w0 j" S3 G
link[i].number=i;+ g9 i: \7 J% i- d6 z. l
}
( m9 b: q# v& vprintf("\n");. ~+ e1 f6 W* s4 C+ Y9 ?# R
count=0;
; k/ s1 i2 o/ Bh=M;
% @1 ? @ l2 K) b V; tprintf("依次退出的猴子: \n");
( ?. H- C9 w2 y( c' N& _+ |while(count<M-1) w0 V1 Q8 ~6 ^) M$ A- b( `
{i=0;9 S& B4 k% L" p
while(i!=3)
, C+ c' y: m. u{ h=link[h].nextp;
5 n x( _. s. {6 M) b if(link[h].number)
. X3 U1 z2 i( l3 G3 `* Y i++;}
2 ]/ y/ u: X$ Z6 ^5 r1 E+ R) ?: M) }) ]$ a' j e& j
printf("%4d",link[h].number);- k4 G9 m- U; U+ f
link[h].number=0;$ y, W4 [' Z& J: E8 s W
count++;* r. l6 q. x5 R4 x$ d; m
}
4 X3 N# e% B% F# A
) q8 r0 P6 B$ c- M3 |printf("\n大王是:");1 f& _ {9 W$ k& A
for(i=1;i<=M;i++)
; y/ \, E6 ?8 ]: R5 } if(link[i].number)0 r- F- W* w. Y- m" N
printf("%3d\n",link[i].number);+ ?$ r! }) d2 o4 }0 j! s
/ f$ A x- C" u5 L+ D! o9 K3 L" f2 E: X8 _$ L, V) C: _9 [
}
! ?* j# i7 G! W第三种是普通方法for循环) i% L3 R2 Y: f! `" v
#include<stdio.h>7 z2 Q1 [- M6 _, L
void main()* l8 f1 C b* V! h" v
{ int i,k,m,n,num[50],q,*p;& T7 b) e( {5 c8 N% A* c
clrscr();
1 i: t! u- k- _3 L( B printf("input number of person: n=");$ [& `! K3 c7 m& g# M6 ]* }6 X
scanf("%d",&n);
) S. l) l! s% S# Kprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只# x& e6 O" J1 f$ ]4 v
scanf("%d",&q);; G8 }; j# ^& k$ m# C! t
p=num;6 I0 X, \$ ]4 L& J7 {
for(i=0;i<n;i++)* E; a) G4 C8 z) F% O
*(p+i)=i+1;
x' p( h1 ^. `/ ~0 D0 d i=0;6 o+ {9 P" l o& z
k=0;- ^. ~4 v# }) A# [% I7 L) R, o1 c
m=0;$ n" a6 i2 b" L' a, b
while(m<n-1)
& V0 ^1 h+ r) X+ f4 }/ n {if(*(p+i)!=0) k++;
# ~+ y1 r0 z$ T if(k==q)
# z3 ]% f8 J2 U9 Y7 {0 I3 l6 ~7 x. Q& ~ { *(p+i)=0;0 \4 L+ ?& G& W+ v2 P0 p! X7 |6 \. {1 z
k=0;
& B* y" T: p, ~+ p m++;+ q) V% n" p$ K" {( t& t( V2 s
}4 o. t: X/ j) G4 ^! U8 Q
i++;
; f# [( N# f( \9 Y8 s6 [ if(i==n)i=0;
- {$ @; g6 ~# d& k }- z' c/ E- F$ Q: F" U5 y
while(*p==0)p++;% W( N4 q; v) P: r% A* d4 c5 S
printf("The last one is NO:%d\n",*p);0 ]; k4 a0 _! }9 T% }
getch();4 x3 L) N. ]% `+ {' d
% @& j7 \6 _ @% \} |
|