|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!! C# t9 Z& y1 r7 F8 r' v" n
这几天我在忙着编一个问题,我用了一种方法编出来!7 d3 W, ]' X+ {9 q
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
1 B5 P0 @3 [. ]$ j. e注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
- ^1 V' n( k1 z9 u, `5 s) b3 ^, `1 T9 @2 p
7 [7 ~. i& F7 U+ ]8 a5 L; x
题目
: N: X! T6 f) c山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。0 ~3 l5 F' W! G
第一种方法:利用循环链表' I! k6 h, C3 d
#include<stdio.h>( Z3 W- G! x, }* m, \: @6 ]8 W1 C1 x9 ]# {
#include<malloc.h>
7 o; W0 |0 z" J! N#define M 8 //共有8只猴子' z* q7 ^5 S, J5 z: l5 y' H
#define N 3 //数到3只时退出第三只
& b3 q" g# V& f, q8 Q' itypedef struct monkey4 c: D5 y% c& W: E" l
{int number;% N( h/ I7 P: \6 S; X' Q
int flag;8 q- `1 f5 a: n$ z( E
struct monkey* next;
5 h" K# ~: @' Q, m}MONKEY;
. E) q$ g4 A5 ~: _. C( pmain()5 d' g i, `0 w) V/ M$ W M% V: G) D4 G* h
{ MONKEY *head=NULL,*p,*s;: W. n" ^, W! t/ _9 k
int i,sum=0,count=0;
I7 S5 Q9 r* [1 f clrscr(); //清屏9 }6 n- Q' R+ T# u* E
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存! `0 c. |2 R" r3 {3 H+ | h
p->number=1;p->flag=1;* s, [ H+ H8 g4 a- Z9 a
p->next=head;8 q" P7 r$ H/ c, T4 o* c
head=p;" O. X# W) j7 [# l# `1 t3 F/ ^
for(i=2;i<=M;i++), `& c7 l/ j' v3 m, V. ?) l
{ s=(MONKEY *)malloc(sizeof(MONKEY));
$ Q4 h% U& ?4 G6 h8 z: _ s->number=i;s->flag=1;
3 E" \' w, S1 |% L* a& D s->next=head;
% A6 k' ?& t, c. P( ?" |7 L' M z+ g p->next=s;p=p->next;
" a. F I6 m( _* ?! v# ]' ? }: a" Y* {" u' w
p=head;
6 \+ H, R. u& s* a: x for(;;)$ v# a9 Y6 g \8 J% A- ]! J3 q& C
{if(p->flag==1)
8 p( g) r2 W# C8 n count++;0 k; y% w0 q% M" j. O8 L, g. D
if(count==N)
% S3 s4 p( ]# _& i9 V O+ i2 W6 N7 B {p->flag=0;
8 }! i1 X {' q* ?5 z- x count=0;
# I B( O9 q/ d0 j sum++;}
# u) x6 E3 d9 o3 d# }2 B6 { if(sum==M-1)) z' h! |' G( v
break;( u+ e/ r$ o2 [- N) z3 n
p=p->next;5 r+ d. V3 P: V' j) |# B0 W
} c( o* [5 v( F( V
p=3 V. [" C( ?$ n9 e6 o0 F. }) N
head;
( M1 a" l5 g! `. p* ` for(i=1;i<=M;i++)
6 b( U! O" a# q$ \ M( [) n. b { if(p->flag==1), M! ]; | x3 n7 m- u4 k$ [
printf("\t%d",p->number);
) H0 B0 D1 |; ^! a' K p=p->next;5 @8 U: h, z9 D& B" A) a0 |
}- W2 Y; R4 [ I5 P. Q; G( o8 S
& d' [" P F4 a9 {1 V$ h/ K" X) S# h' V6 E
z7 x& ]7 P( ]' g3 y% Y' X: J
} ( _# K) T" g4 Z; @4 d1 R
第二种方法:数组) I) T+ k' ^: U1 g1 W
#include<stdio.h>
6 p! ^8 J r% h3 k#define M 8
2 J' _- [" ~# S0 r! w; ^struct monkey
/ y* ~& ?, |7 k3 X: K{int number;
, {- F& i$ B1 I4 j( eint nextp;" g4 L1 [$ n* C# f+ ?8 r# i
}link[M+1];. [) m) R3 f. a1 R/ `6 }
0 k- _5 x t: n; w% y
void main()
) K" R6 Y, v6 o$ Y/ P8 C{int i,count,h;! a- d% x% V: E* a
for(i=1;i<=M;i++)
j. n% W0 U& [- A! D# t7 Z{ if(i==M)
X8 V. V- d3 z5 Z/ R. I7 f1 V1 g- @ link[i].nextp=1;% ]6 n5 s w3 T; D
else! C6 \" K' V" u
link[i].nextp=i+1;: @6 K: T$ k+ a: v
link[i].number=i;( w! r$ R9 d$ ` r
}
: Z9 ~- R/ G n7 _' A5 [0 nprintf("\n");
. u: h: f9 N5 h$ ]# m) ^count=0;
$ ~; r' w: ^3 e" jh=M;
7 C( m8 b9 v6 }/ _printf("依次退出的猴子: \n");7 u C. ^# G/ X; w
while(count<M-1)
! h& H' \" @8 ?$ n9 }{i=0;
q/ ~, b( n. N8 Z. u' h hwhile(i!=3)
) h' {* G; \7 N; R; c2 u. P, p. D9 Y2 F{ h=link[h].nextp;2 U7 B! e) x( ` a7 r' P2 u' s* X
if(link[h].number)
8 H( H6 h, d+ W# F9 x i++;}
' F! w5 r, [' m# q- I( o: M' _. q. f8 }
% j' J7 W# A. i) Rprintf("%4d",link[h].number);
# m, P; F8 a5 `; r# q" Y. M3 Ilink[h].number=0;1 O- W" f5 ~* s Q6 O8 M
count++;% |3 t$ J2 f& [0 b! i0 C! J
}2 M5 c& r5 q \/ f( M( {
* ?; F) A& B# i: iprintf("\n大王是:");
; E2 p8 d9 O; S" l for(i=1;i<=M;i++)+ q# B) N+ f+ \# L
if(link[i].number)$ K! G2 Q) h* w# ]( u& r8 w* R
printf("%3d\n",link[i].number);% @# K k5 ]; ^
4 @1 u# z7 T8 w2 v/ r* \. L) Z8 G* A- l
} 4 [- B {! _7 A/ t0 V; U" L
第三种是普通方法for循环
, Y1 Z( S* S% }7 @4 S ]. ]#include<stdio.h>
$ j+ ]9 c/ M0 v7 ]+ |void main(); C* j) n! `# x, m7 T2 p! c
{ int i,k,m,n,num[50],q,*p;
2 S# A1 L% O# e$ n clrscr();- ~8 L& t( j% `) l' N' t
printf("input number of person: n=");
3 R, D7 Z, g" A. k7 J% V3 S& U scanf("%d",&n);
; u, k3 h3 V- { b& sprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
/ B7 S5 F' J5 j4 [8 V: J scanf("%d",&q);$ z2 F3 U2 v4 B$ e( Q M4 ]3 e1 V
p=num;" q7 N4 F: l& a; w& l% ^9 C; K; V" w+ E
for(i=0;i<n;i++)( u0 X5 e" \) p" q
*(p+i)=i+1;
" `: T, c2 _. S0 B i=0;
5 k# B; a4 E% S' m! W; ~" z& I k=0;
5 ^ v% T$ }. M4 i3 \, u m=0;
' A1 X. E5 `9 J1 O. Q( \) v: O: W; `4 L while(m<n-1)
$ ~7 r6 Q$ b' J1 ~& W {if(*(p+i)!=0) k++;
N( h' M1 X) D" I if(k==q)
0 ?/ T, [- h4 }8 j0 {6 h3 Y. i) { { *(p+i)=0;" z6 c) H# B' {
k=0;* P5 \& u9 m: i
m++;
) k$ J) l" m l \* R/ Q- T }
* k% g) P$ U1 s3 _ H: w; J i++;: L- O/ {0 v3 ^3 t% V- e9 T* E* _1 X$ H
if(i==n)i=0;3 D$ X) L7 J6 | [/ M- b4 V! D
}" A7 o8 D& c+ L1 B/ K6 _
while(*p==0)p++;
) }" k( J! O$ C printf("The last one is NO:%d\n",*p);
, X6 V$ K! s$ g7 _0 J' D getch();
0 b9 S' |* X8 Q( ^* \4 c( W$ ^' F0 e/ n
} |
|