|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!3 m. h1 t" `9 Y
这几天我在忙着编一个问题,我用了一种方法编出来!6 U* E% n, i+ \' c# m
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
$ Y6 n- |6 q; x$ X: ^7 ^注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 , d( _/ H& }* d r: d5 E' {& [# K6 G
: t/ i5 ?' k. ]0 U
* r' f( r$ p% W* d 题目. V, c% u1 N2 X
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
2 [2 ?9 e& G- k- k2 ^第一种方法:利用循环链表6 r# H: _3 c- l5 l* e' L L
#include<stdio.h>4 i" y( u- ~* ^
#include<malloc.h>+ i3 J' O- `- ^" w3 {
#define M 8 //共有8只猴子
4 {) c5 ]2 v2 J% ?#define N 3 //数到3只时退出第三只
. {( N4 v6 r. {6 K# F/ jtypedef struct monkey5 e, I1 _" n. Z# v% j7 N7 e
{int number;! ^7 ?9 M, z/ f: ]9 c' T
int flag;3 v5 {/ R W/ S* Y
struct monkey* next;- {* n7 |: M9 I& Y" H5 h+ Z
}MONKEY;; H% o" c3 X" y) p$ |( H8 h0 y# [* a
main()& C6 e$ s* s4 m% ^
{ MONKEY *head=NULL,*p,*s;
; j: ^) ]( y- m) H int i,sum=0,count=0;3 g1 Z2 h# [+ [# z. V& v
clrscr(); //清屏9 `- r9 n* K( P& E
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
( J3 ]/ s6 ]1 N3 a p->number=1;p->flag=1;
1 ?' H; K1 ?( j( G p->next=head;
* d6 @5 s+ C' t5 v5 { head=p;
1 t" V y. O# ~$ x3 ~ for(i=2;i<=M;i++)& I3 c) I" @ X o. `5 k
{ s=(MONKEY *)malloc(sizeof(MONKEY));
9 d( }9 H0 N4 r& g" C8 q( o. ? s->number=i;s->flag=1;; r N/ D. W8 x% l# P8 Q2 U
s->next=head;
: c6 a, ?1 ?( W# b4 {: R& C p->next=s;p=p->next;" [# m0 H6 A! R$ s( t, n
}
, ^1 e4 X# Y# N7 o% @' f1 g p=head;' \; {' S3 N6 D [' ?) {( |6 j4 c7 R
for(;;)7 b6 s& y% P$ q' V, Z% ?* Z
{if(p->flag==1)$ d1 i( I2 t W4 E
count++;
% L+ J6 K& L6 s+ _& F7 w2 b if(count==N)) L# Y: Z, u; W7 r) M* h
{p->flag=0;6 Z& {& \8 {) Z! `- n( J6 Q
count=0;
8 ~: l; a, A: R! I4 F6 B! s! x* U1 E sum++;}) u/ k* r% G0 X) ^5 P2 w
if(sum==M-1)
5 B9 ?, ]* S1 Q) e( j I break;
J1 q& p/ `1 A p=p->next;
( z! L2 o, |( b* j7 H5 u, F; A }
) u# M' z9 b: A2 W& d3 n4 E+ X2 a p=
) i; ]7 S% M& U, F head;
8 f* p$ F+ c6 _6 }, h6 X- L for(i=1;i<=M;i++)( x9 J0 F/ l0 k2 _; N1 ~& T
{ if(p->flag==1)
) @% }. q( `5 t4 v- W' ]& @6 C; H printf("\t%d",p->number);+ `3 z% H& ~& w* W* S. m
p=p->next; y! e" |+ o& ^* a+ M3 J+ j4 l0 Q
}
" e9 {9 t# p( Q- K# A1 d1 L' a2 L& B4 u k# K$ \
! Y, [+ E. @7 t D, T
! R# V: \7 k9 U" p: J
}
: t9 }4 }" |. ?: F1 X第二种方法:数组# i1 p+ }; ^$ a
#include<stdio.h>
% }( l4 x, f+ x4 R) N! |6 S$ x#define M 8
0 ~5 I! d( U3 qstruct monkey# T: h1 g) l2 Y1 n, M& {
{int number;
+ h' }# L7 i Vint nextp;
5 _* e8 P0 N' K) a, L8 _( {/ y M}link[M+1];
. i& u$ i5 V5 L5 E1 W7 L: M& U: J4 S4 K4 a8 r! X
void main()3 f5 V) d1 h0 z- f% `8 q3 t6 i
{int i,count,h;" E6 m- o5 a, }) `4 f! u
for(i=1;i<=M;i++). [: ]4 I V+ @. G
{ if(i==M)
5 l1 x5 G( U/ Q link[i].nextp=1;
, G5 Y. A1 j7 }, J' G else
! T0 @: s7 }5 B- b+ Y1 L link[i].nextp=i+1;
" R3 \1 j# W+ ` z% Q8 w link[i].number=i;$ p& p- J! }: W& ]
}
' [9 j) p/ p/ B+ d: w4 Iprintf("\n");
2 ^' L' ~' H8 U: Gcount=0;2 I2 L$ t4 k% f5 I1 o% V
h=M;
& u6 H o- J9 lprintf("依次退出的猴子: \n");
3 [4 T. S' J; n% a" Jwhile(count<M-1)
r# ~+ Z! Y: t1 _* ?{i=0;
% Z# @, ]+ r3 S' Hwhile(i!=3)+ s8 g3 r3 J0 A" ?
{ h=link[h].nextp;( Z, J* T# {' \ K: Q' r
if(link[h].number)
7 n( O( V1 H) w6 u i++;}' x# ~' `$ Y% | q
& N& A$ {! m( b5 R2 W. iprintf("%4d",link[h].number);
5 w; P- j3 ^8 v. \% { u; o8 J; nlink[h].number=0;
) W* s2 A$ ~8 u/ G5 Dcount++;7 a4 d( i5 j0 `: \0 o4 ^
}
* j# Y) p8 b7 }6 L4 H9 @- \, a! p8 j' F( v/ o$ m; R& |
printf("\n大王是:");9 W2 Y, B$ E) V& |% I
for(i=1;i<=M;i++)
3 y7 D7 m; _( Q, t& n" i if(link[i].number)6 s3 R& q* i; s$ Z' ]- d" x
printf("%3d\n",link[i].number);7 m: z4 d3 K. T8 I0 c
7 |, ]' G( O. k5 _
3 A9 o7 Z' H) D' e/ F. b `}
# g7 @/ N k1 I5 @, L0 @第三种是普通方法for循环
! X2 S" { _! j+ j6 l5 K; Z#include<stdio.h>
+ j& k0 i3 D$ K+ c( @: E( Bvoid main()
$ P* q6 H. `2 _& \ Z1 K{ int i,k,m,n,num[50],q,*p;
5 S9 c1 {( l6 M2 N5 B clrscr();
; n4 i8 |& v" A printf("input number of person: n=");) k4 r! C2 ]. f5 X2 a! P2 D5 f
scanf("%d",&n);
3 B$ T$ f' ^6 k8 x s, N- pprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只0 b' Q; r; ~0 O! k$ w5 o
scanf("%d",&q);
0 f w0 R" g& N6 Y( O1 K p=num;' f5 |7 M6 Z# X- N* q k: H
for(i=0;i<n;i++)
4 T {# ?1 n8 \; L *(p+i)=i+1;$ U& [$ k. X8 \9 ?) o% y4 S: _
i=0;( M, y3 j4 Z3 U$ [1 j9 ~
k=0;: \8 m- A( A9 W7 i% M
m=0;
, W; D' G ^7 Z2 e# a: B' w- a while(m<n-1)
1 o* y1 y3 r7 F4 l s {if(*(p+i)!=0) k++;; B' n" ]- r$ a1 E3 k
if(k==q)
- D% v) o- j& _& [. ? { *(p+i)=0;! H3 F% r) f. z
k=0;6 ^7 q& Z6 R/ @) i- m6 d2 n
m++;5 Z0 Y1 ~8 Q7 q- M/ I/ O
}: t! o5 e2 V. ^
i++;' z- g$ _$ I4 R
if(i==n)i=0;! ?5 n" Y7 n! J7 m+ V9 N( a& N- R
}. [3 R4 U, |0 _& ?% |
while(*p==0)p++;
/ `% V/ J7 O% g; {! i printf("The last one is NO:%d\n",*p);
% \/ l% S: e4 M4 I+ a getch(); y0 V; Y* w p7 g. r+ x( g
, y. ?$ x" H; X+ e( ~8 G} |
|