|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!7 y% w- y- ~' O/ [
这几天我在忙着编一个问题,我用了一种方法编出来!
) O/ p) Z' _: e7 A但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
6 Y1 m- A7 g9 m' a6 ~注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 / W7 ^! }- v% ]- C, l
) @( }* w' |0 w4 D/ d' j+ j' }. Z1 n# N p; U
题目
5 f. H/ _5 P9 I* h$ [1 I山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。" }$ s+ P( z% _ n3 O4 w" g
第一种方法:利用循环链表
4 o* l, O- h# ^/ V#include<stdio.h>$ y7 P" Q( W0 h" a0 X5 X& I8 N \
#include<malloc.h>6 D/ \) K$ m/ g' ?
#define M 8 //共有8只猴子5 A& e5 V- B2 r) I! B9 L, k
#define N 3 //数到3只时退出第三只5 C- f+ p2 p( H7 b, r! m$ U8 Y% ~+ y
typedef struct monkey, M& ]/ r) N9 \& E
{int number;) N5 L9 b, N4 z4 {8 `
int flag;( _$ U! v! u- P6 p3 `3 E6 H
struct monkey* next;1 _, R, Y. A& }3 H3 j" E3 N! `
}MONKEY;
* h5 }" S0 `, S$ L* q/ Cmain()
; Q, [0 M/ f8 V7 B( s- L9 L{ MONKEY *head=NULL,*p,*s;* j/ U8 S: ?* N* A @6 P- B
int i,sum=0,count=0;
! l5 K5 U7 p2 V5 Y, Y+ L clrscr(); //清屏
6 @1 W, f# h5 Q0 v( C( z- m$ N5 N p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存) z" X( Z- S+ e$ A/ N Q- q' j" H
p->number=1;p->flag=1;6 l! ^5 p, Q9 T, y. ]% Y
p->next=head;4 Z. k7 K; ^4 q" U. e
head=p;+ X. v2 @% j8 r& Z( V
for(i=2;i<=M;i++)! Z, i: ?9 p* U1 d1 B
{ s=(MONKEY *)malloc(sizeof(MONKEY));, J! L: t2 F% a7 W) C8 s A( O J, p
s->number=i;s->flag=1;
3 P8 ?) ^2 O/ d9 Y( b( A5 D4 i7 k s->next=head;
+ A* {8 z( |" Y1 s p->next=s;p=p->next;
" c9 p$ ~& h+ _8 M) c' E: f; d }2 s4 Q6 @5 k, A3 |* N
p=head;
" Y7 G8 F' L3 r9 D* O' U; A2 c for(;;)
! d# s' |$ [6 \& O3 H! x# o8 \ {if(p->flag==1)
& A$ S" }; _9 V% {/ x- I3 W- p count++;
* b9 V8 d4 x& o4 I if(count==N)
' n# ^' @) x. d$ Z" ?) l {p->flag=0;
6 `5 o" r& V. t2 P# j- I count=0;' b0 `/ M8 }: C2 U
sum++;}
; c- Y" K" L& F5 C, I8 v" a# e if(sum==M-1)1 [& {3 d+ P: F& }0 h+ }& j
break;
) s) W' r$ I/ A p=p->next;* D% d5 S d+ A, K9 C% ^4 @$ T# _
}
% @" Y: f- F& a9 w6 M! | p=
" L" x+ c+ P% L1 m head;/ X7 j% K) |* y+ X* J3 |. w& X
for(i=1;i<=M;i++); k$ r9 y1 M' G2 O1 D+ ?" S( Y: u2 |
{ if(p->flag==1)" D& J9 s" e8 O, x( H/ Q1 x% b6 ~5 {
printf("\t%d",p->number);
* ^- D2 |4 E! D p=p->next;; |0 P" P; L5 z
}
& { |1 D8 L2 |" `
& J' s' ]2 x( A: o6 q2 i* @1 g0 i9 a3 l
0 c# b( S( D+ \% s% R
} # c$ N6 ~6 f2 b$ v% R
第二种方法:数组
* Y' ?" Y0 `( g' C#include<stdio.h>0 `7 g i' T# o0 h* v# P) ^
#define M 81 L( ?! J; @' w
struct monkey
2 {$ o$ ?( D- v" U! o0 w{int number;0 f! t8 n8 K4 l" d( _7 a/ F5 a
int nextp;
8 }9 v- p4 X' l0 D1 x0 Z1 a}link[M+1];2 M! E4 G5 k* b- M
/ ~# d8 p4 t& A3 Dvoid main()8 C6 t# v$ Z5 X
{int i,count,h;$ j7 a0 B' X# c0 X& [
for(i=1;i<=M;i++)
) M: x7 y7 {" x- E( g/ p, e6 A{ if(i==M)4 F. w1 M" G2 y4 C5 i
link[i].nextp=1; u& O( w3 @, H! i$ C
else
5 A7 S: Z3 U) s. _# l5 C link[i].nextp=i+1;
, z v9 o! J; |% j9 N5 [ link[i].number=i;
; O7 u# q2 \) z9 D. s}+ \1 }% C6 O4 M6 {. m
printf("\n");# ]: w }. F6 h+ r
count=0;. c! u4 D/ ~2 w% S8 d. D
h=M;
: ^" v8 o2 T/ m1 V& u2 l' W1 oprintf("依次退出的猴子: \n");
1 d, U/ G+ C) X8 u* P8 awhile(count<M-1) c5 D, e1 @" S$ r, M( _- t
{i=0;
' G5 w* f \0 n% U, D) pwhile(i!=3)! R( y7 n1 t3 U. r: J
{ h=link[h].nextp;1 L$ T: c- |& E
if(link[h].number)
9 G o/ y7 `3 ^% J' m i++;}2 K1 Z7 C8 E* d: \+ U5 S
% F: n i3 g m# U. n/ Cprintf("%4d",link[h].number);
+ B& K0 W7 J5 P+ Q/ l: X: N% Wlink[h].number=0;
9 { c7 q' o9 o4 P7 d0 \count++;
! {1 T/ H1 U+ l& V7 c}
; n8 Q4 m; w9 G+ |) `( Z2 Z
; T% k$ e/ J, {& S* iprintf("\n大王是:");8 T" d9 K9 ~0 y9 `) `
for(i=1;i<=M;i++)2 s# E1 G- @- a) X$ E
if(link[i].number)
/ V: D. M; d" n7 J: x5 u printf("%3d\n",link[i].number);
2 `3 B& b4 Q, A6 r. m1 v6 @7 m" }. i; [& B. b+ w( X1 b4 g
* I9 I! A6 G/ q5 Z) r} % s+ \2 |7 Q+ E0 N; S
第三种是普通方法for循环
6 ?; q5 u# ~& O! x, n#include<stdio.h>& C5 X n4 x: n' {( Y
void main(): I, H6 u5 H+ r6 B
{ int i,k,m,n,num[50],q,*p;
4 P$ M4 ^" b/ M! K' F b; Y& _ clrscr();! Z% D+ I; z, [5 C8 O- [3 P" g4 |
printf("input number of person: n=");' ]! ~' n& k3 [& p
scanf("%d",&n);" O, d. r( `& n' t4 H( x/ `& M
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
8 I% p9 [5 O2 P scanf("%d",&q);
. r0 y9 F/ l9 N3 Z- h) `, a0 u9 O; M p=num;
& \) G4 Z1 [3 C+ X for(i=0;i<n;i++)4 R8 R+ L: Z3 H9 _0 |6 N7 f
*(p+i)=i+1;: p; b- ]' b6 m+ P+ C
i=0;
7 l/ C. o0 }+ F w* H k=0;
9 r, q3 u3 H# k m=0;
5 t, h0 y( H; u/ }/ n6 M while(m<n-1), y6 _/ w/ N. d2 Z: P! c. [
{if(*(p+i)!=0) k++;
; j& O: E, y& v0 a if(k==q)- [# y4 J+ e7 J g0 K: b
{ *(p+i)=0;
6 J5 Z- k) e7 F- _ k=0;
t% h) }6 X E8 R3 r o m++;
0 `$ J3 k% P2 U$ v: d/ M- E$ s }
1 v: }) O9 Q( g: |5 x i++;
* o2 P/ l2 j) y+ n, ?" O- J) c if(i==n)i=0;% [+ d( B+ ]# M: b
}0 P6 _1 f8 d7 K- W# F
while(*p==0)p++;9 s( |% @" G; K. [2 L, a0 G
printf("The last one is NO:%d\n",*p);) `) c* z7 L. z X! ~
getch();7 ^! G/ P3 ^& L6 j! D4 O
; A7 W7 D; g; R: y1 s} |
|