|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
3 ?/ y: U& G2 n5 ?% d" P$ D这几天我在忙着编一个问题,我用了一种方法编出来!# p8 r* P+ E7 P3 P7 C- \9 t( w
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
+ P* {) A' W) b+ w+ a' b* C" ?, i) V) g( }注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 # i: F; \5 k' `# T
- [5 p8 I: B/ A& i; y0 c
# ?9 D& F3 i# d4 G 题目3 y+ c( B* Y$ D7 K- o8 {4 G4 P
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
* f# n1 m4 i4 U ?. u$ U0 V; q第一种方法:利用循环链表
, e: F7 O6 g0 d" r#include<stdio.h>
* D# g( W0 B% W# h# D# m8 Y#include<malloc.h>; [( }: |: k+ L% k' x
#define M 8 //共有8只猴子/ p* B# M9 X' o, c$ h
#define N 3 //数到3只时退出第三只
" f# s9 n7 C- e. @- C/ Utypedef struct monkey
. g8 ^& |+ g6 Q9 @4 F; E G! ]{int number;) X( g$ k; [$ W4 P
int flag;& G0 O' p* l% B y% e0 E
struct monkey* next;
7 b1 M# D3 C& A/ `2 \, R4 }}MONKEY;9 n/ ~9 g2 m) e+ d, F& Z
main()
& q$ I8 q- X! F' t0 {; c{ MONKEY *head=NULL,*p,*s;. p& Y, P9 l7 L. A2 t1 Y
int i,sum=0,count=0;
0 P" s9 S& d y; M6 B clrscr(); //清屏" t4 ~# V4 V/ P
p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
+ M) |9 r o# u5 | p->number=1;p->flag=1;
/ _7 Y/ P: W3 \0 I) w2 B p->next=head;
+ k6 W+ ~5 T4 L head=p;# i) J* q: X/ Y& o* Q
for(i=2;i<=M;i++)/ c3 [1 x) x& i+ p) {
{ s=(MONKEY *)malloc(sizeof(MONKEY));& r/ I- N. K6 ^
s->number=i;s->flag=1;
4 G5 ~4 H G3 S: @0 @ s->next=head;
! g6 n5 i3 S" z1 } p->next=s;p=p->next;
' ~5 Z5 d* z0 c7 x) \7 t+ O }
& K) y6 W$ J8 b9 o p=head;! n" q& t7 N R$ _6 ~( K4 C4 k
for(;;)
$ r8 w: w2 ]/ N% y {if(p->flag==1); n, O& J) W" R
count++;2 x7 S# ]7 u, v2 K0 ]5 R0 n
if(count==N)
$ l" l3 u6 H3 q* |! | {p->flag=0;
9 J9 ^7 U. X. q2 v1 n8 F count=0;
" ]$ h. j$ P- l' |2 ? sum++;}
/ c' q/ z% [0 s7 m, k0 A) D9 q% z if(sum==M-1)
: K* `2 r/ c+ ~# D0 ? break;* H% V9 q( f& r1 }
p=p->next;
5 `: C5 ~" i+ a- A7 ?7 t1 r }
/ d: ~3 k6 f! r& l. p, w/ ` p=
# X9 d2 l W- `; U. R& ?7 @4 M head;
6 O- y; @( C: a* G8 j% S for(i=1;i<=M;i++)
# B8 m. u- s+ x3 J3 }( [ { if(p->flag==1)
, y7 h# @& \ k- Y3 }' K: x/ v printf("\t%d",p->number);
+ ]8 u/ [( M0 p; m9 f p=p->next;
5 h4 ~5 H6 o- z# z I }# n! \* }3 J) C- v
3 F; i8 S% O/ D1 k+ o% P: _# M+ E
1 a+ e- N2 }5 |/ Y9 ^1 m8 ~3 y
$ g, a) _- i; Y5 l, b}
" g/ H, ?% S) R- e5 n! O: M- g9 l第二种方法:数组9 U( O, b0 |+ i) _
#include<stdio.h>9 I& p# r, E" z' s
#define M 8 e0 C. @! B R. p3 J; e
struct monkey7 @- D7 B [4 @7 }% b
{int number;
8 |7 u( C9 c5 ^) M# Mint nextp;
% K+ R) ^9 W, \- T7 a2 {}link[M+1];; k8 n+ p4 R/ s0 z: t' a8 S6 P
0 t; ?) s% j4 s
void main()
% C8 j; Y5 T( c+ q{int i,count,h;+ z: A) a- [% C2 v' C
for(i=1;i<=M;i++)) m' S! A* N( [6 T" F, `" u J
{ if(i==M)
' T) m$ n* u1 d) X+ {1 L! P; X link[i].nextp=1;
: P! v5 H" ~) s% Y" V) p1 G0 i* M* E& N* S else
/ m& g) s7 p6 ^- X1 y, r link[i].nextp=i+1;
2 Y$ m) G$ @. T3 g, G link[i].number=i;
2 p, g! |3 Q( V; W7 m/ D! }' v+ c}; R2 ?* i7 l, x9 b3 f
printf("\n");
( ]% Z' J* h/ q& w5 z( Icount=0;
6 b; N3 ~3 A8 Q+ N; D5 sh=M;( q& I+ Z- i: S, s0 c! K, W
printf("依次退出的猴子: \n"); y4 z; L; A( N4 \
while(count<M-1)
* _! N6 V% \' K- I0 E{i=0;
; h% ?( F; E$ l. O0 gwhile(i!=3)
Y4 [+ R/ _7 F9 F{ h=link[h].nextp;
% M- _+ t, [) @ @ O# X' l) m if(link[h].number)1 b5 o% t' f9 P0 ^3 _# j) m2 ~& a
i++;}
$ I* L! i1 ^6 r* r. y" `7 u9 h& N. f7 i8 l
printf("%4d",link[h].number);
, _, z" H6 J- u5 ?link[h].number=0;
8 n5 p/ N0 @2 ]8 Y0 s, Jcount++;
& n6 ` \9 l# ?8 J; Q+ ?. e}! c2 s+ \3 d/ \- n; F
4 z8 y" _# Y( `1 i; J1 m# l+ X% ?
printf("\n大王是:");
; p2 Z6 j( X0 j( {0 W for(i=1;i<=M;i++)/ `2 V+ |( z; t" J8 }% u0 {
if(link[i].number)' m, f" g$ U, Y4 C7 u- W
printf("%3d\n",link[i].number);
0 F) {- P1 U. `0 M% _$ ]! n9 n/ L( P# x6 o; C, w9 w6 L0 ~
) f6 D9 L7 r+ F7 o0 U}
: L2 c9 O4 w! F6 {+ e& f第三种是普通方法for循环
1 e5 T4 Q! v& t; ]# _+ h#include<stdio.h>
4 t! a7 P8 ?$ |1 uvoid main()
( h1 [& l3 J( z3 t{ int i,k,m,n,num[50],q,*p;& b, `, \& q" m2 S
clrscr();' _0 g) c) `+ @ E- P3 q# f u
printf("input number of person: n=");; l! m" q8 r' Y* |0 W
scanf("%d",&n);; Q1 o, D( c2 ~. v" o
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
1 w8 \; W8 `/ X% Y5 S- x2 E) V scanf("%d",&q);7 C! g5 `( G3 p5 t; J- z- x/ L' i
p=num;, h" g; `. \+ H
for(i=0;i<n;i++): c+ W/ r( x" D, n
*(p+i)=i+1;7 I! ^; o& `) Q' M* K6 @, b7 J8 q
i=0;( A; ?& w! U3 K9 o- L
k=0;
I$ f: x8 R4 n% @ m=0;9 u. p9 Z# l2 k+ A
while(m<n-1)
8 P0 p+ n$ B6 s6 W5 F- I) _ {if(*(p+i)!=0) k++;$ K; B/ Z$ q5 |# z
if(k==q)
) |7 h+ y. U1 r: A& E" @* n& a { *(p+i)=0;. @3 T. v# I! N0 y
k=0;$ a* M0 C/ U" t7 e
m++;& v% O% y: o& K/ \
} z. X1 g0 d$ o" k5 m) \
i++;2 D! {, g M u9 n. D" \& _
if(i==n)i=0;
* @/ Z) L; d% d: d9 _6 |5 D }7 h/ @. L0 q* U R% r
while(*p==0)p++;2 o& U' a4 i; N/ K5 H8 E
printf("The last one is NO:%d\n",*p);2 T# C1 e4 I, E( i- m ]1 k; Y4 J
getch();, M0 O% m: Z5 U$ P5 v
/ l& N) M/ p" R* _" @} |
|