|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!- o, \0 K4 ^( q& ^6 H
这几天我在忙着编一个问题,我用了一种方法编出来!
' W5 P' {1 v% V8 N但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!4 f4 R1 I6 |9 z$ K7 }" c
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
( H1 @0 ~2 K( Y; \& y4 N& K
. c! J5 |" v6 \0 E |" Y; s! _7 L3 }0 v6 i2 U. u( m* T- o( i8 a
题目: G9 v- B6 i c, H' @
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
% \& H0 O. O6 Y第一种方法:利用循环链表 r- c% h. `7 P0 Y! P B
#include<stdio.h>
# i- M% Y/ @% m( V#include<malloc.h>
6 `' C) }" L! j5 m2 H4 ]#define M 8 //共有8只猴子9 ~2 _" w# }" y
#define N 3 //数到3只时退出第三只
& n( {4 G) {* _2 Ftypedef struct monkey0 c2 K8 J" e$ v* E6 a! j( p
{int number;1 K7 {, w$ e1 m/ z
int flag;
( K. i4 S8 _% r4 N( u- P% h8 Ustruct monkey* next;
: W& l, K/ h( [% z3 g}MONKEY;
8 m" ~" e: V1 d7 k! ?main()
( U% L- g6 I3 a5 O7 o{ MONKEY *head=NULL,*p,*s;( U- _/ D: }( u
int i,sum=0,count=0;
; g" R: H+ m5 F3 t& ~9 y5 L# y" q clrscr(); //清屏8 ?( T* R7 N- \5 b) L/ Q6 W! y
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存$ U+ M( q$ l* t# E5 o4 q1 g
p->number=1;p->flag=1;! ?2 O9 X9 X4 L. M$ P! m `
p->next=head;- k8 w$ k& i0 \
head=p;
5 J+ f# C" X6 n8 Q1 e for(i=2;i<=M;i++). c5 @* L4 ]' n* ?6 O2 H$ n
{ s=(MONKEY *)malloc(sizeof(MONKEY));
- T, J2 ]7 o2 v; J/ J2 q, d s->number=i;s->flag=1;
* J2 | p3 k% V1 ]; G- J& l* V s->next=head;
" S" _$ c$ B- w" K0 F p->next=s;p=p->next;
6 v* L" A0 b( ]; W1 U9 @ }
8 W# m4 S/ z( J+ S9 ]: O, D p=head;
; ^7 v1 g$ H3 t' e9 y' v for(;;)
; P( L1 {* Y v2 l& n* d {if(p->flag==1)/ L/ ~" n$ {1 A S& C
count++;
8 a1 S( M% \! j if(count==N)
! @! F/ i( b( x7 u. O: w {p->flag=0;
/ D: H0 I) s2 z. {+ h; m count=0;& W i& \" K) t( O B: w9 t0 R. S
sum++;}
" {( j1 Y; v( ? if(sum==M-1). d- d1 a/ B5 @/ G1 g$ z
break;/ E" z; F: n/ B1 O& n: h
p=p->next;4 a$ q1 e" j% J, {* J+ v$ z
}# T4 [: v2 C6 d8 s: c
p=
/ K3 N& H* U, u. K9 _. f s head;
: T3 V: E7 R& H/ y1 O for(i=1;i<=M;i++), A: e& w: U3 ]8 [! m
{ if(p->flag==1)
7 v; T, L1 M% q4 t8 R7 m0 j6 I* R printf("\t%d",p->number);8 l5 b2 I5 p& n2 |
p=p->next;
/ A( P' N* w( x+ P I, [ }6 E" l/ H& I3 T5 D! d
& P7 F' t0 g5 z7 y0 h) _
' W6 Y% N: a' Y2 H. J; O6 J, q9 ?9 [5 r y4 H/ `/ p1 P
}
, O+ G' w# Z* ^, ^2 D; R' D2 T第二种方法:数组) B" u4 P) [2 Q$ g6 G: @
#include<stdio.h># L' }0 ]# W* y" P8 Q( H
#define M 89 E( \- S2 {& a
struct monkey
, j3 c1 J( }6 }" k; g+ U{int number;
7 M. `# z, T/ E# G* P2 W x9 o" Eint nextp;
* F# w) w7 R7 w- J( G}link[M+1];
* B5 W5 l Y) X( P& h1 A4 O" _0 M2 H. w
void main()& q/ l( N+ e# l( b6 `
{int i,count,h;
+ G$ Q8 }6 U3 o- E7 Vfor(i=1;i<=M;i++)0 D# A: \; S2 t; S* |1 }0 j8 c
{ if(i==M)
i6 B- f& ]5 a* s/ k) S' \, k2 ?2 J link[i].nextp=1;; s5 j3 \; Z+ O
else
- M7 ]# {7 O s7 N" U8 _' j. R: w* _ link[i].nextp=i+1;
- V* X% J: `# g# O1 ~ link[i].number=i;# J, o3 e3 V! F+ U8 j' |
}
, x* I! A# N! ]/ l% `; O% c- w4 Aprintf("\n");
& ?, r! u. d0 C4 t; Ocount=0; m. g; |* G# \4 c5 y
h=M;2 t# _, ~& b, Q8 w1 G8 J/ @, R" N% {5 D
printf("依次退出的猴子: \n");
% ?$ o) M( b6 p' rwhile(count<M-1), C. c$ E. A* w; t v
{i=0;0 A5 q/ U u, g, P$ I
while(i!=3)
2 X5 X! O7 t1 v" j, p& n/ l- A( |{ h=link[h].nextp;
9 k0 p6 {' @, E6 b/ v' P5 j& u1 K/ z if(link[h].number)
' u: Q: @4 ?: g, e' t i++;}
7 b; C, w$ [& N5 f" l+ {1 Q8 w' _ r/ \9 A* D: _
printf("%4d",link[h].number);# L5 a0 o3 }; \# {$ S
link[h].number=0;
% V+ @. m4 P; A* tcount++;
. Q# T6 K5 j4 `5 Y @6 g9 p- G}
- J% ]# X) |) D1 U- v5 t
% ~6 G# k( I2 V1 _printf("\n大王是:");+ R1 M" d/ D- ?/ O. x; S
for(i=1;i<=M;i++)5 m' F6 k5 d3 L6 g
if(link[i].number). i9 c, q* T+ t6 \- J5 W# t; p
printf("%3d\n",link[i].number);* u/ x5 N! _) U) R& ]/ ]( O
2 E' q0 U$ U4 b) [9 W! O; @8 O& q3 c1 ?
}
+ }# z5 C) n; U/ y第三种是普通方法for循环
8 L, j$ j5 ^5 H8 |' C. L9 f. Z#include<stdio.h>
' ]5 u# P8 S- c* n$ {/ K- yvoid main()7 S" Z! I, V: @: W* p( ~
{ int i,k,m,n,num[50],q,*p;
1 H0 u3 l3 R) Y4 L% ], f* D clrscr();8 Y- _' J( G, }
printf("input number of person: n=");7 ^& j: K& N, I" p2 t
scanf("%d",&n);- _" U* C9 `& z3 e
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
9 Z- z! ^" k# |: I) j scanf("%d",&q);
. f, x$ `/ c* j: N/ V5 X p=num;
& A& q( T' h/ L; U* Z( V6 ` for(i=0;i<n;i++)! y4 Y2 W* r% y- m+ y
*(p+i)=i+1;3 p M" | g2 i# h) s; T+ i# }
i=0;' z) R+ y8 H7 V/ S" N
k=0;' U; k: _' a% @
m=0;
' j9 D9 y" y( I4 R' q1 B1 u% S: i while(m<n-1)
2 p$ G$ J2 M) B" } {if(*(p+i)!=0) k++;" Y. ]& Z# A" {. `1 D i. I6 {
if(k==q)- P/ K$ B1 n: C/ U+ |
{ *(p+i)=0;: S- R8 r3 Z2 @1 i. d
k=0;
/ k3 }( T3 R8 c; q: V m++;
! c7 K8 s; X+ j; H9 s# r+ G1 ?$ _ }
% V! ^! G; ~& m& |, v0 |; ? i++;
+ y k* y! f/ ?2 \ m! ~ if(i==n)i=0;! M) S0 g' {' r+ b" E
}& @0 x' x, V- H6 \7 R" J0 {
while(*p==0)p++;
# o& m0 U: `' Q% g k printf("The last one is NO:%d\n",*p);
% {# t2 g) M' P8 j4 l8 { getch();
0 _+ P( j( }: k" q1 E5 j4 G% X" w B9 Q3 G8 @+ H N
} |
|