|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!# i& \3 h5 F. t" P" I7 L) r
这几天我在忙着编一个问题,我用了一种方法编出来! E- y( N' |! t( v& }
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!& I2 t3 {) w p% | {. v
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
% u" u9 g% a* B5 t
% |9 L7 }2 D5 t3 D, Y; M u: D2 ^) N
题目 ^9 E: |/ s) P% y% R5 @
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。" W4 ~& R# a9 X" G# O' l2 v; H# R
第一种方法:利用循环链表% Q8 s- C/ J+ p8 D0 m7 ?
#include<stdio.h>
3 D2 d( S- o+ Y1 B z- p' D#include<malloc.h>
7 Q+ E. j1 u2 }! Y9 ?% d( x#define M 8 //共有8只猴子2 y: g; W: s2 B3 ?" g# k; B7 d
#define N 3 //数到3只时退出第三只
+ P8 Y- M+ o# C% E& ntypedef struct monkey
' b& {4 X) O9 [2 I( H' L{int number;
# A9 D' Q: h2 pint flag;
/ k: Y( i, W$ _6 s% w- Tstruct monkey* next;
" v, {4 _, K1 Z$ u( G' d}MONKEY;0 D: I+ u% j7 L B
main()
" T$ q$ r" G: [$ M0 _{ MONKEY *head=NULL,*p,*s;/ j, d9 r$ s! \
int i,sum=0,count=0;9 K3 m. ~! r0 A8 B. ]
clrscr(); //清屏
+ N6 b. e; U* m$ M( S6 c3 l9 ~ p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
. n7 s& t4 ~# M/ k p->number=1;p->flag=1;0 _8 u8 j) I! x( o
p->next=head;
p& a' R1 A2 I1 g( X# s head=p;
5 _* }2 S8 X" c( Q, x' M B for(i=2;i<=M;i++)
5 D( d4 r1 d$ w+ t { s=(MONKEY *)malloc(sizeof(MONKEY));# J6 d& w1 v, D. B
s->number=i;s->flag=1;% [& _9 o t5 i: V8 Q" z0 a# n
s->next=head;
. N7 E/ R2 n' U p->next=s;p=p->next;
/ B/ N2 j" {0 H* F/ X+ I4 } T }, R3 \4 z& m' N" }: S0 N
p=head;! `( E& b& l' T \
for(;;)( v, _7 Y# w# ` f
{if(p->flag==1): \7 |6 E2 V" v/ Q4 t
count++;
9 f) y9 @4 @! b! V+ a' A" d& r; s if(count==N)/ C- |6 z7 I* d. ^/ |
{p->flag=0;
8 ]3 z% b3 p9 x' R count=0;
: m! S. j% |/ E" T# j& s sum++;}
/ k6 _. \$ J7 W4 M) t if(sum==M-1)# z9 u/ S* x' x' T
break; i3 A5 k. {5 c% n
p=p->next;* O x/ R+ t" x3 ~. ?1 R9 |) i/ J
}4 h4 f) @& I8 e/ V% G% |2 b# j
p=
: r* F4 o0 J' ~ head;
( [3 G; Y: p. _# P for(i=1;i<=M;i++)
& {; _* f, t+ o9 \' @1 Z) n `( u { if(p->flag==1)3 m4 G3 h* C* f W- }( U# o
printf("\t%d",p->number);0 |+ c- h; v0 P" N" c
p=p->next;
$ K6 P9 {9 B" }; T% w6 n }, }2 `$ z5 a6 ?) f0 T; N; |3 I/ x0 d. z
9 o7 A& Y, s5 z
3 Q; G- b: X! u2 `/ A) d3 B- X [7 E0 @) z: Q/ Y2 R
} $ W# L4 l1 H! T7 t. r p
第二种方法:数组
* J8 D" n4 w/ E( D/ _' D" @, p#include<stdio.h>
( J# r1 t& v" g4 E# E+ ~#define M 8
( A/ L5 c8 ^5 \" {- K# P% _struct monkey
6 K4 l/ n$ X1 t& L5 s1 R{int number;% w( L l- K, k
int nextp;( y8 r# P6 K+ }$ L2 `
}link[M+1];( A( Y, f/ J2 O* g2 B3 ?& L5 ^
# L: F! ]7 h' r; i( y
void main()
( w& \6 ~' Z% H& f{int i,count,h;
, @( [" x' S% ?for(i=1;i<=M;i++)
* ~" h; d7 u# q& T$ b1 c{ if(i==M)
' K' L5 D/ E* K* g* J& Y link[i].nextp=1;* H4 P% J4 U* G5 ~/ H0 C9 C
else
S3 Z/ c- f; ^( v. J/ z# V! E! _' N Y link[i].nextp=i+1;
: b' {( u3 L: s2 G u8 H+ S link[i].number=i;
- L# J" _& }# _4 {% X6 ^, B}
1 Z7 t( Q4 W' Dprintf("\n");
! V* I6 i) s' f4 w( P4 V2 w& f( Ccount=0;9 U4 ]/ l4 L% p5 n- Z8 C# q
h=M;
3 X/ [& T/ t, a oprintf("依次退出的猴子: \n");
& h- m7 d! L9 ?; P* w( \5 A% Awhile(count<M-1)
& p `( v4 R: g' O8 t* I7 f{i=0;
7 A4 w+ q# f+ z5 c" `6 jwhile(i!=3)' s4 l! G- c! T9 W6 f2 X
{ h=link[h].nextp;
# @ U# L# h1 u1 N' g5 @6 t if(link[h].number)/ g8 N. d+ v- y
i++;}
+ f* R' Q* V2 \8 Z2 x: P
% E% [) V: B4 [ q, N3 g, u5 Mprintf("%4d",link[h].number);
# G6 D6 W6 g1 [4 s1 d6 K. \link[h].number=0;5 h3 _8 f- @6 D0 s: ^. t
count++;
; F( H( H& {- }}+ I) T7 o% I6 q
" s$ w) p9 x2 {" m% gprintf("\n大王是:");
7 H; B0 S% ]& ]4 w; ]4 A: L for(i=1;i<=M;i++)
1 T" R: l9 ~" u" V- A if(link[i].number)" T0 e5 V2 I$ N# ?2 p5 l# C( x) Z' J
printf("%3d\n",link[i].number);, l. y( p' ~/ S; j
; D4 R) L2 u' z3 t% R
, r I. |$ T* P0 X9 G* m' @( w}
" j3 T# ^8 C. k4 p0 b, J0 U- k第三种是普通方法for循环8 U% J9 {3 z+ A
#include<stdio.h>6 P7 w a2 A' v2 o6 \( ]# P
void main()
! Z; |. Y$ Z' i{ int i,k,m,n,num[50],q,*p;
! O. J1 ~! f- x! h clrscr();
+ N, U; j( M) m7 S3 F- q. E$ N printf("input number of person: n=");2 P1 G8 X0 @2 N6 r- G6 r
scanf("%d",&n);* ^# r% [4 ^# O7 [( Y
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
, P4 O6 F* }7 Z3 N' b scanf("%d",&q);
: R! X% O/ i( w; e p=num;
5 \& j1 F- M' p' M# j4 v, B2 t for(i=0;i<n;i++); F, \( \8 m, O2 c
*(p+i)=i+1;% [1 V A, n9 `1 i
i=0;
4 g4 ~& b# B) Z& w# { k=0;
' [3 }' _& ]7 Z/ I% x/ j# [+ h8 | m=0;' `+ g0 M0 { A5 d& j
while(m<n-1)
; U6 _1 q! Y- M) N8 v" t {if(*(p+i)!=0) k++;
$ _9 I: T; ^% B3 G if(k==q)! C7 ^- M# M7 G! a
{ *(p+i)=0;
+ D% B( i3 H" V2 G( m k=0;' w# U: [. D) z9 j1 `
m++;
) w! ]- ]5 J1 ^( g5 [' D+ m }9 z8 o2 C0 Z. r, H" h1 s/ J g
i++;' r* N% J3 s, e7 }8 D
if(i==n)i=0;
8 ^; n6 k0 v) R$ e }
; o. R8 {* a; X* N while(*p==0)p++;- ~- ?, v9 c+ M4 a6 E6 Z
printf("The last one is NO:%d\n",*p);, {7 V. B2 T! ^' ]) m1 i& R( E
getch();
9 s" Q2 @6 s" S- Z/ m1 }3 h, B7 k! P, s# N4 A: O
} |
|