|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
/ q0 n* X' P! ?) T; R这几天我在忙着编一个问题,我用了一种方法编出来!8 Y' R( z7 @8 \' L% f& @
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!* M, z: z5 V# R$ O7 f; F$ x
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 * }* ]: M! `2 a! o: o0 f" f5 b% Z" o
3 p8 Z! Y- O L8 p& ~6 j
, D( l1 O8 K# {; K, a, h/ f5 r 题目
2 f; }3 h, E. z A- I$ _$ ?山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。' ?1 \+ ^3 P% @* J
第一种方法:利用循环链表# _: \4 ^& P' o' y8 ?3 r
#include<stdio.h>
( ?. t4 D: c! e4 y1 F#include<malloc.h>
* E, B2 h' [ }, h' A' {3 w#define M 8 //共有8只猴子0 C6 \: t. h% ?2 j6 Z
#define N 3 //数到3只时退出第三只
/ ^* L1 m0 E& f, s; qtypedef struct monkey7 L# O3 {0 X/ x! K2 m7 s8 x
{int number;
: s7 o$ s) j3 p7 x" Wint flag;
, W$ |, @) p- x; z" E% \" Cstruct monkey* next; z9 B6 y) q- b" L5 k( J
}MONKEY;' b$ n; h8 w0 X
main()
5 b; X$ T R e3 m{ MONKEY *head=NULL,*p,*s;2 d1 o( W0 }/ Q9 _8 X+ h- `
int i,sum=0,count=0;, T6 P; h8 \( x$ A) B$ F! r
clrscr(); //清屏
$ m0 d. |% }* Q5 ^ p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
8 @, C% Z- _) X; _* _* | p->number=1;p->flag=1;
c0 F8 {. I- {& P6 d1 P p->next=head;( _% ~5 s. X: _
head=p;0 q$ B/ R! T! ]& C9 [' A
for(i=2;i<=M;i++)
- R3 s9 ?8 G" x! {$ G { s=(MONKEY *)malloc(sizeof(MONKEY));
6 [7 E; w3 O4 n8 a t s->number=i;s->flag=1;
$ P3 ?% F' d* p" B" e s->next=head;
, B; ^( D. G( ]9 l: ]' r- X p->next=s;p=p->next;
' E+ {, b8 t" {/ f( V" E }
# J; d6 f; ]* n6 v p=head;
$ L& ~; t& s! q/ G- y3 e for(;;)+ k- u7 D8 ^ R
{if(p->flag==1): @; w, v Z; ?" L0 `
count++;+ _4 o$ t4 S+ c9 [1 f
if(count==N)/ ?: m% f. q5 x+ u9 z2 w
{p->flag=0;
j; ^6 H1 q& ]' F. ?4 w count=0;8 Q8 z _1 ~8 w* R" J+ r& e
sum++;}! b7 ?9 q4 ~, s1 ^: x- C$ L7 y) z& W+ ^
if(sum==M-1)
# w9 |8 d" \ K# F# O* R& U* e break;
5 s) L0 T1 a) G3 Y. Z* H. B p=p->next;
7 ?3 R) j @6 ]9 G }: q) e) C' @/ O) o2 b& K7 c
p=
" X. `' F& i3 e4 S9 ^ B head;6 F: z& `7 w5 e) X0 \1 m
for(i=1;i<=M;i++)% c/ @& J$ s' R; t1 C
{ if(p->flag==1)
8 ^3 R! L+ C( X0 O printf("\t%d",p->number);
0 ]. w0 i/ ?( D. M6 K% z p=p->next;! H9 Y2 d# G" T' n, y, W
}
$ J3 m& H1 M; G& p& L8 M
3 E/ w$ v+ C3 E# w
. B% h. _: z# ^& l5 S
0 d/ s. K2 ]0 R. D& m; z} 0 |6 } ]+ m% I7 x% W
第二种方法:数组: q- j) ?" z7 k" M2 R3 A
#include<stdio.h>2 z) I$ t1 ~$ p; d- o
#define M 86 N5 ~/ x+ c) ~# \' f; k
struct monkey
2 I; t+ t4 {5 y' }{int number;
3 _/ i2 _+ s: u+ s. Zint nextp;8 ]/ |) \8 u' }- m
}link[M+1];
7 j9 Y$ x. Y" S9 W/ }- ?& U! E
) i' ^- n' J9 V7 R# dvoid main()6 r7 v6 F1 R |
{int i,count,h;; d! _7 W4 N! n& U; N
for(i=1;i<=M;i++)
# d3 j. t& L/ R- x+ Y$ L{ if(i==M)+ M( z# t, t& S7 i3 ]# a- ]
link[i].nextp=1;% @* D7 q @- W1 D$ Z
else$ s3 o3 B4 z* g+ N3 R+ z
link[i].nextp=i+1;
& x* d6 ]9 d3 i5 H link[i].number=i;
: K* a: t6 U* z}
V' Y0 {6 [ P0 [( l4 C6 bprintf("\n");
- V0 w8 ]0 [; C( y+ c/ h, u! z. vcount=0;; J& c9 ]3 Q/ y( v
h=M;
* B9 d" N( r i( b8 b cprintf("依次退出的猴子: \n");
/ G! ^- t* H6 C# ]4 Nwhile(count<M-1)
. l g9 g& ^$ U* ^{i=0;
; d1 ^! E: a1 ^) I7 E! \while(i!=3)
: z8 D$ b; }" O{ h=link[h].nextp;
W0 V0 P5 i7 ~! ]3 ]* j9 W if(link[h].number)/ _# \9 E9 A. Q$ k1 t
i++;}& h, P6 @0 Z! ^: u
) a4 k4 T% d) k; v) Yprintf("%4d",link[h].number);
/ Q. d- E, K% a8 b& E, s9 _" qlink[h].number=0;* Y: l5 c& t6 |, ?+ Z9 _
count++;1 P1 M8 Q9 p' s
}" y* @2 ~( k2 g8 f/ ~
: X# X7 P: x+ h* ^" o% d6 Y
printf("\n大王是:");
! J# R/ Q- K( C. q! b& P9 N2 b for(i=1;i<=M;i++)* p) B: |: l! C- S6 p
if(link[i].number)
, e* U' K7 h( a printf("%3d\n",link[i].number);
9 u5 D. J* m8 Z1 D q4 X
2 y" `* d/ R( P; I ]7 ~( P# ^3 z9 E7 J6 V# @
}
6 L' `, ~0 v: [% f' N第三种是普通方法for循环
1 `/ n$ o/ [3 o1 P6 G#include<stdio.h>
& x- D3 D7 R6 [$ e: w6 Hvoid main()
, z) K. r* E7 ~$ P; p9 s{ int i,k,m,n,num[50],q,*p;
( I7 ?# h, C+ G* } clrscr();; C& T; {6 ~7 f$ \. S# |
printf("input number of person: n=");9 E7 Q K% f. K) ?# e
scanf("%d",&n);, Z; B: ], J/ w. f
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只; g3 u" r2 i. M9 l- i; L6 R
scanf("%d",&q);
1 F y- G* v# W \3 X p=num;1 ~' y0 W4 m) [7 a! h& U( S$ C# L
for(i=0;i<n;i++)/ L/ p! R1 y. Y8 v& @7 a
*(p+i)=i+1;' ^( g: D7 O/ z+ I5 _. g8 @, g0 m
i=0;" S% f4 p" m4 a. M5 E' B* k
k=0;
p5 j" j0 t2 C4 M4 V5 W m=0;& G7 i/ W( l% y/ a8 G5 s3 F U
while(m<n-1)+ Z: v0 D3 L2 { {8 O0 Z; ~" `$ |
{if(*(p+i)!=0) k++;; S4 J6 v8 ?9 S% T! H% R$ {* h5 u
if(k==q)( P8 {! c6 J. K' Q& A
{ *(p+i)=0;% P# x% r- v; l0 K$ ]9 E5 r
k=0;6 C9 m: b9 N3 `# f. C( i7 s
m++;: d. h) ^. O, l2 p
}
+ \; L' x3 z/ i* Y6 ~ i++;9 @# D/ A: m9 i* B# A/ ~$ Z" H
if(i==n)i=0;
* |% ]0 G/ {% e" E }
: h' l0 x, L# s, l while(*p==0)p++;
! u' f2 H$ [6 c! I& Y8 H printf("The last one is NO:%d\n",*p);, H+ _; b1 {; }6 t" e
getch();( l6 ^/ o' X8 N0 U, U
2 `4 r0 C; X2 u0 {. w0 [} |
|