|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!8 v% G& u3 x5 ]( c
这几天我在忙着编一个问题,我用了一种方法编出来!; z# y7 S; ]. ]' ~
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!2 p) x, g( c$ p8 v+ z- G
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
* o3 |7 F$ [4 Z3 V, [
& `: ^/ W, O- [) e6 b8 x
5 J+ _" @ ]7 V4 O 题目
; H: ^; N }+ w1 ]山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。' P, t& x! N! k; [6 C- u
第一种方法:利用循环链表0 L6 T& W- e; a- t; y# p+ g5 b2 O
#include<stdio.h>: H) A4 W7 d1 q! |2 V9 _$ s; K, J1 G
#include<malloc.h>
" [6 L! S" e: N% P2 h1 A#define M 8 //共有8只猴子
; q" p; w. q; f+ C; s3 j' A/ ?#define N 3 //数到3只时退出第三只
9 ?1 q/ y1 ] |9 Rtypedef struct monkey
( y2 l( w2 B+ g7 M1 o1 _{int number;
3 K7 i* z2 _+ wint flag;4 H/ C% o8 j- y
struct monkey* next;/ S0 n6 o& v3 l. \# G- v, H- I
}MONKEY;( I' }2 i6 ~" d' f) j+ L0 H5 n! D
main(). R% l! E! U& B" Q
{ MONKEY *head=NULL,*p,*s;
$ s8 Z# g0 n; J& B! j int i,sum=0,count=0;5 j7 a* F# E# K. ]9 q% d
clrscr(); //清屏
$ c6 b: B' L* }1 O2 D. U0 i# O p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
) `( j! n9 h# L4 P1 S* K p->number=1;p->flag=1;
; k9 D" x& G0 L) C2 s p->next=head;
L" {/ b2 ~4 e' j3 ~( a! Q head=p;
: V3 r. [+ [" j# n for(i=2;i<=M;i++)
& {5 y) G3 o) C! ^ i! V { s=(MONKEY *)malloc(sizeof(MONKEY));7 w l3 _7 ]+ z. ?* C
s->number=i;s->flag=1;
! W) q; C6 a6 S6 ~ s->next=head;, a4 t* s- D! y7 z
p->next=s;p=p->next;
0 L- b/ E5 |! f V( J: j }
5 P$ Y4 x" ]. {" k V p=head;
, M d3 y: R1 D3 }/ y, b4 ~/ k for(;;)* t7 W5 ^3 A4 w5 v
{if(p->flag==1)2 A$ j* C& D; m9 M: r P
count++;; _5 U& W; |; [ ~. @
if(count==N)
& _& w/ c0 v4 ?4 b3 j0 E% m) [, N {p->flag=0;
: f7 y" g/ X- E7 l& F count=0;2 _2 ~) E! W6 G1 b7 _
sum++;}
; ^2 b5 {+ Q8 X( e9 [" H4 B( p if(sum==M-1). p$ n7 S, p6 P: A- \
break;( c* d: R @, M3 g- k1 \+ _
p=p->next;
; x2 N* |; c6 \3 r2 h( r& b$ Y, l }* B1 B- B: L# _) e9 u
p=; i" G& \3 |8 k" o0 m0 F
head;
4 O! y" n$ u! R; y8 x- U5 y for(i=1;i<=M;i++)
' H5 m3 }/ p, h) b/ Z+ J0 V% ] { if(p->flag==1)5 N" V8 {* [" J& F9 u. t; p1 O
printf("\t%d",p->number);, a% `1 z! x2 I# y
p=p->next;8 D5 M! W' Q6 w5 k$ l+ b- f6 ]- j
}
6 @* w) s) }. ~$ Z
& e/ u# }, V5 u8 S' Z% @5 Z1 H9 z
2 }* Q2 N7 J2 h1 z' b; j
5 T6 A+ [" g/ x; K}
; r2 W1 _/ X( o5 l第二种方法:数组
) w3 ~% ?3 W- H% i8 a" A! L#include<stdio.h>
9 E t* G* Z$ O. V! `8 D6 A$ r- k#define M 8
; V' \) z$ x- xstruct monkey
, y% i" B- X3 v+ _{int number;
1 f+ m1 C4 X6 d+ o9 W- hint nextp;
i8 I$ i& d/ e5 K- `( v; B/ q}link[M+1];
+ J1 f9 h& J- ?: u3 C6 M/ z8 V4 F/ p4 r! s. {
void main()4 k# X6 V5 H/ ^1 [% T; E4 {
{int i,count,h;
2 g6 b4 S& w" p# A, @( Lfor(i=1;i<=M;i++)+ e. t, e9 W8 R* e; O0 p: S: p& N6 r
{ if(i==M)
; `: d# X2 W2 c* g$ W( l1 Y$ _4 X link[i].nextp=1;
}5 t' o( b8 ~0 f, ~) P$ B else
( z* [) a, J# f& Z; _. \9 T& O link[i].nextp=i+1;
4 C/ \) n+ [" j+ ?0 l5 e( w link[i].number=i;
]' t0 m1 S' z1 |}2 ^# A6 O( j$ Z- x4 ?1 I- R, Z1 q* b
printf("\n");( J* D6 g3 |: M, ]4 f6 m9 M
count=0;
2 n( N; _. G+ m' q: vh=M;' @1 f% Y( l% \6 \+ I: }, g
printf("依次退出的猴子: \n");
! S+ D6 d0 _9 }, W7 twhile(count<M-1)1 W/ ]0 n' d! {' ^; {
{i=0;
. \# w6 U# F: [4 Lwhile(i!=3)" H6 h# R* o5 O0 ?/ B
{ h=link[h].nextp;: |' j2 z; \/ K) r) a! e
if(link[h].number)
7 P- [, c( j H' e; _$ {& |% V' {) B i++;}
W- ?) v3 \+ t; R0 `' E6 o9 u# N; R( }# v% T8 K2 H' Q
printf("%4d",link[h].number);% S" O0 b# d" ?
link[h].number=0;& r: N! Z \+ H+ J$ k
count++;
+ w( j0 W7 n! q}
9 F3 g* } g3 S7 v1 ^9 N& U; K+ \; b
& Q( \0 u( l2 Y$ W& X5 }4 C& U9 wprintf("\n大王是:"); E9 _* B$ Z6 d; z. @
for(i=1;i<=M;i++)* V# L4 Z3 c3 t, T
if(link[i].number)
4 O$ v, P6 J2 M6 k" Q5 ~' E+ J printf("%3d\n",link[i].number);
5 u! J* E( C( e& F
9 @9 E5 z2 b2 Z& X+ \0 a. I/ E: H u
4 X# M! Z* u$ |. d6 \# n} ' L j' l1 m ~- v- c8 V
第三种是普通方法for循环- Z, y& k) O! i b; `9 j- z4 c3 w' b6 g
#include<stdio.h>
4 a& [+ ]3 _7 ^& ?! A% Mvoid main()
4 F J5 ~- m& v3 t8 `0 D5 a1 g* |+ |{ int i,k,m,n,num[50],q,*p;
5 [8 C+ k) d# Q k* n) M+ J clrscr();
. e3 g+ J, A3 [; w; y5 l) ? printf("input number of person: n=");
! G% F. ^- M2 y2 g* i8 D$ J scanf("%d",&n);
6 X* O5 _+ w5 Aprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
`3 z& r9 ~! N: Q$ S! x$ ]* G4 i scanf("%d",&q);/ Y: {7 h. k: p# X: {; r
p=num;2 N; K9 p* t, E+ u. h" Z# d
for(i=0;i<n;i++)
6 }+ B$ Y: Z8 x" M *(p+i)=i+1;
" K6 b+ A! H7 _" z i=0;" |- z) y. B, M% t
k=0;
/ l+ l7 g9 D( J" D: y/ z$ `' u8 I m=0;
; D9 L; r2 Q2 {& @ while(m<n-1)
& L" j! s: L- L$ ^ {if(*(p+i)!=0) k++;+ Y6 [3 r+ V0 b
if(k==q)
9 x% t# k }$ F( s: l { *(p+i)=0;
3 X, }: A' l+ l( r F% ~0 O k=0;$ f4 Q" ^' ~$ E) D. L: ^' T5 }0 W
m++;
4 J5 C: m9 ?# Z: Y0 b7 K! L1 \ }) W I/ v' A' M+ n9 c5 [: B
i++;
" R/ F& l) c" }- |2 b if(i==n)i=0;/ E+ x( e3 d) {: t. L( U% ?' p$ ?& [
}
" }) V' X! f; U* C while(*p==0)p++;
7 u6 t& o x( i5 l7 p/ Z8 G' I* i7 ^ printf("The last one is NO:%d\n",*p);, p6 ^6 t9 v7 _1 A* a
getch();
P( @8 o! H* \9 W! ]8 e+ q8 f# G2 |/ x S, x. _+ o
} |
|