|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!2 R& p6 p2 @4 B3 T* L. R
这几天我在忙着编一个问题,我用了一种方法编出来!; p! Q0 Z3 X/ j# v
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
. P- Q! ~8 _4 v, U2 @" [6 K6 a注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
! Z7 Q% C/ F: m3 V0 ?
7 e9 Y# r, x$ |9 ~; @
9 ]8 B6 |; i2 K- w" {% e 题目1 V! H7 A- v# t0 Y
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。$ n0 p+ k( A( l7 r( o7 b
第一种方法:利用循环链表
' x/ l) q& C( a( I/ X2 I: |#include<stdio.h>
$ V) `: Y( A* d- S5 ]#include<malloc.h>6 o n4 ]$ W* d1 l+ e, K% }
#define M 8 //共有8只猴子1 A: d. C8 C. `. f
#define N 3 //数到3只时退出第三只
- \0 }. O# H7 Z8 F- m& ntypedef struct monkey5 b' a: M/ L8 D3 l7 C, y
{int number;
7 y6 W! d' l- d+ p0 I+ D( Xint flag; A& M/ J4 X& v2 j: y% {
struct monkey* next;. U) |1 k' a' M( h) b" W
}MONKEY;5 P+ l/ T7 x/ A
main()
# H- d$ m4 d1 ?# r7 L{ MONKEY *head=NULL,*p,*s;6 ]9 Z( c" D3 I6 W- V/ A( k
int i,sum=0,count=0;* S: X! u$ L8 _2 u
clrscr(); //清屏( r1 Z) |, b1 e
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存% R) x" N$ N2 L9 ~3 W
p->number=1;p->flag=1;1 @9 V$ Z; c; p" {3 K. p
p->next=head;- [( f5 _: b( H9 t
head=p;1 P; i( K; ?8 Y" [/ |$ V
for(i=2;i<=M;i++)6 Y& c$ i, [$ B5 F- A# t) @+ l
{ s=(MONKEY *)malloc(sizeof(MONKEY));0 _3 E c' q" G) O! o: D( q
s->number=i;s->flag=1;9 S! D( T% L( Q# {7 j1 {1 N Q3 L& I. V
s->next=head;" u6 r: v) F3 Q0 l6 P3 e5 q! U
p->next=s;p=p->next; q0 E- \3 n( @2 `) P4 K0 F
}! s E* o, `% O) T7 x) a) s2 @
p=head;3 R1 H+ o& `# R: j7 N1 U# h
for(;;)
& O) u4 w( n8 M1 E6 b {if(p->flag==1)
+ g$ M, V& F; n& n count++;4 d3 D' V8 B2 s6 v+ W
if(count==N)
+ p, \) M* y8 ~/ w- {. O" u {p->flag=0;/ E. \5 l2 k8 {* X1 @" J. N1 ?9 l
count=0;
1 _ H F' p% R% I9 G' w' o sum++;}( G* O, G; o9 z0 Z R: h- l
if(sum==M-1)% G7 E( v g' R, m( D1 _+ ~
break;
7 M) W+ ^2 y6 `: {8 w: v3 Y p=p->next;) u7 R7 f/ M4 v2 |: G! U# h
}
1 F- b- F) _' H0 `% p$ p p=
% U" i- p" t( B, y+ S/ C% l head;- u m3 I" F6 }% k9 z
for(i=1;i<=M;i++)
2 ^# ^8 {- F" ~. b- \1 V. T8 M { if(p->flag==1)
. q1 a- j; Y; f1 f& f9 c8 x! a, a printf("\t%d",p->number);6 d/ ]; c# f8 P* C8 q5 k
p=p->next;
3 S+ ?* j, i8 n t( u }& N# c! @) n0 m5 V6 z
9 W& w$ B7 R: d( l* m: o- X$ t1 W+ X5 F% @+ \+ J
: a0 _( t0 m% d; ~( {
}
( L' X$ w$ o7 t9 X. U( U第二种方法:数组
( ~& A( X' o* `" G) O# _#include<stdio.h>) z* S) N2 N: h
#define M 8$ M/ E# ~: y- s" e9 Z! O
struct monkey1 R0 d$ c9 i8 N2 ?: J, s( ~
{int number;
% }# Y7 u1 }8 R1 wint nextp;
/ f, c% b/ O( |5 Y/ S I* ^1 p' o}link[M+1];
* y( S2 ]7 @) Y( w V7 }$ W3 l. a! y
5 O, Z; ~7 @. |5 Pvoid main()
+ A6 A3 q# I l( `2 V- M{int i,count,h;
% j; X3 `8 g* bfor(i=1;i<=M;i++)
! ?/ A$ l4 f2 \. y5 Y{ if(i==M)
% F- S8 a; Y. C. `7 m link[i].nextp=1;
: `' w6 e8 K9 h. ^ else
3 I; N, g/ r; G1 o link[i].nextp=i+1;
2 Y$ O% {/ {/ t3 Z4 h/ Q link[i].number=i;
& I. G5 q+ U$ d9 ^}& L7 l$ a6 H3 h$ t% F5 p
printf("\n");
" J/ r* y, O+ F9 x4 m2 xcount=0;
, Y( o7 H' \' X! U! T. yh=M;& G' k; f# g! B/ _+ G& ~5 n
printf("依次退出的猴子: \n");# @- l: ~' v0 \+ b( A5 D( i
while(count<M-1)
; M( A ~$ I7 o+ X{i=0;6 Y9 O! w2 V1 w7 R
while(i!=3)5 ~3 B- k* P9 B( E% _; l
{ h=link[h].nextp;
9 i7 Q. ^) H" i$ r. v if(link[h].number)
- @" h6 v' x5 a' P" E* A$ X i++;}: v# L y: c4 t9 z$ L
4 L1 D8 T2 H) S
printf("%4d",link[h].number);
& p6 D, B0 }3 @; ylink[h].number=0;
5 v, x! R- M) t- u6 J, u; {; Jcount++;
9 c$ ^; P- t/ T# p& J$ O}
5 ^3 ^4 `- H( a7 ] b1 T, w
+ N! z9 Q Z5 X+ S8 W/ @* mprintf("\n大王是:");) z# I! {. u, o7 @6 k7 @* M
for(i=1;i<=M;i++)
( A5 r J+ m( W8 n) H$ ] if(link[i].number)/ z/ j% T& w1 O5 p! B& P
printf("%3d\n",link[i].number);
6 ~& c O J Q; f- |* V, D& u5 r2 b% u2 w- v* @' [" }4 D7 _8 b
: T8 {+ p0 |9 {4 \}
% ]9 E. J5 }5 s3 j第三种是普通方法for循环
* `* S2 Q" B. Z* w8 {) Z#include<stdio.h>
6 _& }" Y+ K, d- v2 t7 M; v/ n Rvoid main()
6 c& H1 g/ Z& I! A: m9 |{ int i,k,m,n,num[50],q,*p;: q3 p9 T( f% K3 n/ B: l# l
clrscr();7 Y* c% _* g- U
printf("input number of person: n=");, c: y+ f3 Z- f) [6 B7 u2 ~
scanf("%d",&n);
3 x: \ h9 T jprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
3 Y' b$ U- |; r0 }! i a, F* _ scanf("%d",&q);0 a, l: R& c* |
p=num;" N9 @3 `. j) b3 ^5 |, n3 W8 q$ b
for(i=0;i<n;i++)
: S/ a" F' E! z" b u" r c *(p+i)=i+1;
" h# M6 X, t+ M9 \; h) C+ F2 t) X i=0;
7 W) U2 h* |) C k=0;) ?& x# O- X! W# p
m=0;
! D6 Y \" N; H' Z- b0 ]4 c while(m<n-1)9 L% Q% y- {' @* O6 o( C6 m; C( T$ e
{if(*(p+i)!=0) k++;
( b- o2 @/ ]& _' J if(k==q)# I% C# V6 M S, w8 S' l
{ *(p+i)=0;
. w2 ]- i H/ ]4 B3 }( Z( T2 P k=0;
+ ]8 m8 I9 v' v! \* W. u m++;
! n& k) m9 \% b" p }2 K4 H7 s" S7 ?3 L' K( q+ I {/ N
i++;
8 j7 P: N6 z t: F if(i==n)i=0;4 m6 C- k0 d. w5 j, _% l- h
}2 T; R& E2 R6 ]
while(*p==0)p++;& J( o6 V/ U4 s8 r& F7 P8 |
printf("The last one is NO:%d\n",*p);3 [( X' `' @. J" ]4 x2 A
getch();* t4 {5 K8 S. S. g& o! @/ ~
- _6 N/ J' S1 m# j9 e- M7 K
} |
|