|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
×
大家好!
; D' l9 D. U5 e) @这几天我在忙着编一个问题,我用了一种方法编出来!
- v, l. K) |. Q但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!$ m r4 m6 ^! \# w% R; ~1 v1 d0 _
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
! U H& b' s L) a0 N2 f2 y3 ]6 @/ D! N5 H3 T$ n( \$ G
: Q' V; `8 Z3 j, t# C 题目! |* Z6 i9 N# y, W" P& C' d
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
4 M2 f" E1 [) g. M6 W! L! q! ^" w第一种方法:利用循环链表6 I3 i6 |! q- n- I
#include<stdio.h># H9 p% v% B' q+ x& C6 z
#include<malloc.h>, g R& x/ S: \. U& _- {; g& Z, _0 Y
#define M 8 //共有8只猴子, M" @% |, t2 E3 ?+ Q0 l6 X
#define N 3 //数到3只时退出第三只
8 m( e3 J- {4 w Etypedef struct monkey
& s$ H! Z* z. T. C' Q1 ?. N{int number;( c7 ?, O" q$ y6 D- q
int flag;
+ z, U* l# L% ^/ H! z- X0 zstruct monkey* next;
# ^: ~( A7 q9 `}MONKEY;% L7 Q2 g6 w; j: C, R. @
main()
9 g" b- p" r' [) s- c{ MONKEY *head=NULL,*p,*s;
( V; E5 i3 m* m8 A int i,sum=0,count=0;
1 c X; j8 I1 x! ] clrscr(); //清屏# W" J' P0 z3 B6 T3 L
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
) }# @+ f: Y S& z, f4 c8 x# c p->number=1;p->flag=1;9 a0 W: H# Y6 n7 e" z
p->next=head;; q) D* ]& Q6 r! @* i
head=p;' e8 B, P+ H5 B: l' L
for(i=2;i<=M;i++)
7 k& n! x! i% v1 B& V% T { s=(MONKEY *)malloc(sizeof(MONKEY));
6 |% z3 @, X7 g0 I+ a( V- y s->number=i;s->flag=1;
/ F) w | a& D4 G: V' w% d s->next=head; n" ~1 p& l! @; m) ^8 {& _
p->next=s;p=p->next;* w9 k+ i3 }- S4 @. e- c& e
}
* q l( X1 g: N- ?: G W+ K p=head;
/ ~$ z3 `9 L) g9 X+ _" d4 [# K1 p for(;;)6 p" }9 c( `1 k; w2 Y( G
{if(p->flag==1)
7 r2 A# N3 S, q! @ count++;& ~' S3 m9 v: W- I8 i/ k4 m' B: V( ~ ?
if(count==N)
" c" f) P2 J" ~/ x S* ?9 y) I {p->flag=0;% J) [; |# a* U$ N5 k
count=0;
4 y k1 p' y& Y sum++;} T* ^/ n. g% c
if(sum==M-1)
; i& {3 g/ Y$ q% ?' O$ N) X4 I. R# t break;. P7 F: }, `- C9 u* L+ [- `
p=p->next;
( {/ k* v; ?+ ?3 J8 v3 D6 |, p }
# W( `- h$ V: \/ {' L p=) t5 j- x& |- o r+ A) j
head;
$ V, ?) R% l8 f' {0 T. q7 b for(i=1;i<=M;i++)
$ d* j6 f1 N7 m, w/ ? { if(p->flag==1)
0 B+ N! }: S6 l4 ^8 K4 A printf("\t%d",p->number);
# Z; M3 c* v( k' |5 c$ L- W p=p->next;5 d" l5 _/ u5 r1 m, c
}
8 M# I! z: s3 v3 H7 x% a8 ]
3 D: \% H3 A% B& I2 l
1 O/ E; R& q- O9 ~( |. W0 J& F" P, d0 D8 z$ H3 o
}
: ]8 a d8 P6 G- j: g; }% C9 ^* c( J4 c第二种方法:数组
7 M" A' D3 d D6 s' R2 z#include<stdio.h>; ~# K2 V5 x e
#define M 8
2 y+ C4 [6 U @struct monkey- j$ J7 J, _% v9 _3 S2 B
{int number;
" u( n" s! ^: g# r! n& [int nextp;# A" X3 D+ P( I9 l
}link[M+1];; m9 {0 K% i7 _ a
& ~9 l% Y; ^2 J( R9 d6 a
void main()8 O2 H U6 ?/ B0 o6 Y Y# j' [- ^
{int i,count,h;
0 u. I) U, w9 o. s$ ^. A" ]- ifor(i=1;i<=M;i++)9 \4 J! t* {$ \( Q2 K
{ if(i==M)) s# i% Y, S+ d
link.nextp=1;
) O# f& n+ E1 M: i: e else
5 e- e$ y9 Y3 H6 F link.nextp=i+1;" O% R- X, |. }9 Q$ k3 H
link.number=i;" C; |( @1 n! _ c' D2 U
}
1 A8 q6 H) C$ A" e8 t/ Rprintf("\n");
8 R7 H% B8 b3 e5 Mcount=0;9 F0 ?7 x$ L, g, b% e! E
h=M;
, {9 o+ x0 g" S8 e. _, Vprintf("依次退出的猴子: \n");
& i9 V1 P: u5 N4 B3 Twhile(count<M-1)
; k! ], Y s# Y" {( c$ U2 B{i=0;
/ y0 K0 o5 X; e( s ]0 ]+ \7 Ewhile(i!=3)1 f, _1 j& _9 }$ l6 B1 Q- j. P% s( P; I
{ h=link[h].nextp;# {6 ?4 C) S1 F: Y2 v* I
if(link[h].number)
% w- D& \- S6 p$ W) b* _ i++;}0 ~1 T0 N0 \! @) ^0 W
5 E+ c' b1 x" S: N1 a4 uprintf("%4d",link[h].number);
/ b- i* f8 C, H2 n0 }+ @" m# Hlink[h].number=0;
) c4 K" v2 q" s- t" c" y& b% l: d, lcount++;& B. z1 |# w2 k
}
$ n1 q4 S2 S4 L- g
; L; [6 V; j% G& Tprintf("\n大王是:");
) u4 ?8 i) I9 y. j for(i=1;i<=M;i++)
( B) q' b( s4 R if(link.number)8 Z9 R! b7 P9 h- L
printf("%3d\n",link.number);
U9 s: s! E: D
+ Q$ L3 P" w8 H- x1 s: q( a$ N) N5 M! e: B+ D& ^3 H
} ' F! F% W0 n0 v/ [+ s
第三种是普通方法for循环, r1 L. F1 T6 s6 Q* a" [
#include<stdio.h>( k& Q4 q6 P0 i
void main()
6 y4 w `0 V2 c( n# Q# u{ int i,k,m,n,num[50],q,*p;0 A% S' S9 J" a: @. I. I5 t
clrscr();/ k' P$ m P! z& h( ]
printf("input number of person: n=");6 z1 i% G# b& M! N- ^
scanf("%d",&n);
0 v/ V/ v0 }- j8 D* iprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
- x9 \& f u( N4 l+ @( M. e" g scanf("%d",&q);" R. v" N c2 Z& Q' `( h4 ]
p=num;9 j# i2 k0 s% g: [
for(i=0;i<n;i++)
( [* O3 j8 U; f$ i *(p+i)=i+1;# P7 k" {. J7 G
i=0;
6 r& x7 W5 m! U3 x; G3 ^) q$ r) y k=0;
8 T7 C* A. E# i( L x m=0;1 R1 ~0 U( e! t* e1 f0 O- B( L
while(m<n-1)
. \+ D) x2 k7 a {if(*(p+i)!=0) k++;
2 e1 X. v$ h* a1 A# k9 j6 a9 r if(k==q)3 D/ d4 g0 x; r/ e8 r
{ *(p+i)=0;
1 ^& P" u0 [, s( Y k=0;$ u. E* ]0 W+ _' `3 y1 X6 o
m++;2 B' ^0 Q$ L) T/ N+ q
}
! w+ D5 h- d- _& H i++;( B, F. [2 D& @2 U
if(i==n)i=0;
9 |; ]# _! B8 ^: t# s9 l }
0 m4 V% |1 t/ \8 y! Z while(*p==0)p++;
+ p. z+ ~( x! r printf("The last one is NO:%d\n",*p);
" _( o& f- m9 _9 M getch();
: _2 S5 g) K$ J- V) U% A! z
! a& B3 k9 [/ c' [. }( D% c} |
|