|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
+ o2 n6 ~3 t2 w Y7 o这几天我在忙着编一个问题,我用了一种方法编出来!( k; _5 d$ P* l5 @' n! G, q
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
! B2 m# v9 K3 f" G1 p/ Y注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 " E" K3 Y6 ^; I! D. Z+ R
! e1 u6 }2 k0 m+ A: I) ]
; s9 D: o7 r: F0 [1 e
题目' l3 o0 ^3 E* A# z4 l$ v' e
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。, l$ d% L5 ], V; C, N1 {& ?8 K
第一种方法:利用循环链表* B3 W a8 o1 j
#include<stdio.h>
6 x$ z$ ~' }9 }. t5 Y" o#include<malloc.h>
. D/ h! q n, T; G; O( d#define M 8 //共有8只猴子
% i) U/ n3 l; E' s#define N 3 //数到3只时退出第三只2 ~: t* y' ?) V9 y1 R4 _+ g4 c
typedef struct monkey8 Q* g z6 W- [) B/ f1 b: L# \2 H
{int number;
9 h- ]+ c; {( k; J% r5 kint flag;, @3 J U3 Q, L2 M" G8 T$ p8 G
struct monkey* next;
I8 f, U4 Y- V' a}MONKEY;
2 b" K- @1 O m% amain()$ D1 G) i+ d! x# ?! U3 ]% Y$ p' ]
{ MONKEY *head=NULL,*p,*s;- c( G) ~5 P* v% z2 A! p
int i,sum=0,count=0;0 N5 M9 V, d7 O2 }: [
clrscr(); //清屏
. S; @- z+ R1 D' G" K p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
0 O0 [1 \: h+ N" X. R) W/ K& _ p->number=1;p->flag=1;5 u5 g+ f* U7 X
p->next=head; l0 s( Z, m* m5 @- C# g) c
head=p;
+ ^' U' K1 U- ?7 b0 p8 H: K for(i=2;i<=M;i++)
! z4 ~7 E4 e) `% L! v7 U$ d { s=(MONKEY *)malloc(sizeof(MONKEY));
; X) i5 r1 h% n/ D5 c# K' h7 A7 }7 a" M/ }( C s->number=i;s->flag=1;
4 w; h$ ]5 n6 `, w s->next=head;( \, I8 M* w1 m
p->next=s;p=p->next;
4 @4 h2 O. W/ W V x* z0 h }! F- u5 \ j' }! e' h
p=head;
0 f: ^6 t; ?" D for(;;), i+ l' @8 Y, D0 z* o5 Y
{if(p->flag==1)6 Y$ }+ x* M3 m; H( D+ g! B
count++;7 f; ~6 i! V' I+ |
if(count==N) F* @5 C$ x1 r
{p->flag=0;
* G" T- ^0 e( r; n: s, A count=0;
3 i" A3 e; i+ V sum++;}
P7 N! y( S# @- C! H if(sum==M-1); {$ a# ]* ~! K' f( r6 J
break;
( U4 ?5 f" W! `0 f p=p->next;
" v5 L" G. J3 F, Y) q1 W% p" W }+ O9 O6 T( l7 }9 o. J# f( e
p=
# r0 N) h; L' T7 x9 \, r" z head;
9 \2 h& K4 u) `% G( a for(i=1;i<=M;i++)
2 N# p X6 B* V3 P/ U* j { if(p->flag==1). E+ c3 y6 g$ B( x) X
printf("\t%d",p->number);: Z9 ^7 |$ E% [; A0 Z6 m
p=p->next;$ K4 f' a9 n7 W% Y e4 G
}) d; r2 p. K! O5 z9 g
1 j0 `; r: `1 l
S: J! h6 M, p' G6 Z0 T8 d5 i" x1 b% }- } c
}
* C1 G7 V3 s& ~. l! h( K第二种方法:数组
! d+ t" Q6 o7 U( `#include<stdio.h>$ \5 }/ S9 a6 l0 e9 U
#define M 8
7 l" H: g' O2 K8 Dstruct monkey
! V0 q4 j% ~0 ^{int number;
- ^8 p" A; N( X* B: I8 Wint nextp;
$ R* W& R$ O- O) j, {4 Y, |. V}link[M+1];
8 B7 s; k a' Y/ y, i% g9 f0 q/ {4 _% f% ^8 k6 r/ K
void main()5 t$ f- [5 w2 m
{int i,count,h;, g5 Z$ w3 w# u
for(i=1;i<=M;i++)
* _3 s, |' w. C8 Y% }{ if(i==M)
# o# b3 p1 i0 q link[i].nextp=1;- g2 j b7 l3 @
else9 t3 a4 C; g9 k
link[i].nextp=i+1;3 J: P+ k' T/ N9 ^# J
link[i].number=i;
! I: {2 h/ m# w$ U}+ s# R, l( D4 A Y4 N/ {
printf("\n");3 v! F$ T7 n% I9 `( S* A
count=0;6 e9 E1 v F N2 M+ n/ G$ d
h=M;
2 k5 ^6 X, y4 v+ Pprintf("依次退出的猴子: \n");
& \; D6 y+ k: Q( awhile(count<M-1)! W" z+ d# i3 c: G" M6 K
{i=0;
; Z' r3 v) K8 w% u" ?: b- nwhile(i!=3)! ?7 d& Q' o6 s( s+ J2 G2 B- ?
{ h=link[h].nextp;7 W' S- ?! K1 q; y& _
if(link[h].number)
& K8 R1 q" H2 I: Q4 G* o i++;}
( K9 B7 M- A4 ^8 S* g# }, \" \: u4 ^$ g* x
printf("%4d",link[h].number);& |" \$ M' S3 U8 }+ H3 C
link[h].number=0;" @. J0 e x2 M% T7 @! L! |
count++;
) E; i" l; I7 z5 N* f2 j, E K( m" H}4 t& [0 v( R" E
+ ^# A) p0 }. x/ M, ^% K
printf("\n大王是:");! G- I8 m& |- e) c
for(i=1;i<=M;i++)7 y% V( {- t, {2 R
if(link[i].number)
2 K+ U0 ^. \ r9 ]0 j8 v, s3 `2 \- H printf("%3d\n",link[i].number);
% W" i# k/ D) f5 S- L0 J; u: C! Y6 ?
& Z* g' w) }+ ^) Z6 Y! G; Q. x. v' K) S
}
+ n8 L+ Z; o) X% V第三种是普通方法for循环
7 t R* V5 l) C1 Z#include<stdio.h>
! g# H! h% @; {void main()4 W# N! \0 k2 b
{ int i,k,m,n,num[50],q,*p;% Y! k6 t7 \* n) ^. F3 i
clrscr();; d( u- D6 j/ T( {& D
printf("input number of person: n="); y8 [+ \6 B& N; B8 f
scanf("%d",&n);% ^ C- h: |+ v8 g
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只; R5 t# \# m' f w9 F
scanf("%d",&q);# A* S& a2 u- {) G/ [- J2 e. C3 ?
p=num;
! o* ]9 x: u' U% V for(i=0;i<n;i++)
& E" d# `# x* t: k *(p+i)=i+1;
- C& U+ q$ u. ~! u Y6 K i=0; v7 Z+ }/ j8 j! p! Z+ b7 j7 [( R
k=0;4 E7 w* C1 |( }& \' J+ x( ~
m=0;
, D9 J2 y1 } U A3 ? while(m<n-1)5 S8 Q6 e2 c" ^5 C
{if(*(p+i)!=0) k++;
# J; B5 Z' N4 J+ w# L) e if(k==q)
2 [& V0 T' L. O' N! B { *(p+i)=0;
3 Y# n8 R: _" q/ w0 E. A) {' |# E k=0;* H" N6 _( ^6 M: l
m++;1 p7 \. s" Y# w' e
}/ T1 ?1 Z' J; c2 p
i++;: J' p6 X8 c. U- u
if(i==n)i=0;
: H1 z; u6 o- b1 U }/ j" J! _6 O7 j9 w. `! ?
while(*p==0)p++;8 N. p: F) U9 i# D
printf("The last one is NO:%d\n",*p);
* y! |6 }& r# N getch();
0 ?5 T/ u7 H* U& Q
: S/ s9 t( E& w9 D} |
|