|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!. w# j9 I3 s2 ]" W" E Q
这几天我在忙着编一个问题,我用了一种方法编出来!
3 i0 N7 P& A& k- @# t$ M但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
2 M3 f6 s* E8 z v6 I+ v注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 ' C! `3 A! g( {7 _* }& ^$ E1 W
, p" v* [$ x. J7 n
5 ?9 ?$ L, t; r s8 z 题目# E7 p r1 y. B9 ]3 r3 j* \* N- L
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
5 x; }* R6 H3 n$ T) } m/ J第一种方法:利用循环链表1 z" n/ U7 s! g" u
#include<stdio.h>
/ p0 w4 Q0 l7 F6 c& e4 r#include<malloc.h>
% K* v+ v1 Q7 ~, g# d5 z#define M 8 //共有8只猴子
! l4 A* t* @/ ~+ B#define N 3 //数到3只时退出第三只+ X. Z7 Z: D( \) `
typedef struct monkey Y5 o$ k- b# b0 X1 J- Y/ @& l7 H
{int number;
- Y3 ]+ p$ b% V, Vint flag;5 b, N$ ~6 Y' ?- y+ C J. o& M0 _
struct monkey* next;
9 {* r: x: \( Y0 A. p. p}MONKEY;
2 c7 s2 N* D# k( y! Jmain()
3 D5 }& Z# a' ~{ MONKEY *head=NULL,*p,*s;
2 f) }* C1 c3 }9 ?7 { @ int i,sum=0,count=0;
3 c5 n! c9 U& Z2 s, ?; L3 Z clrscr(); //清屏
2 Y* C9 ?+ s( @$ s3 _1 j, s, X p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
3 n* N) P9 T* }4 X" X3 r1 E p->number=1;p->flag=1;; X% j4 ?" \& ]; l1 L, a" e
p->next=head;
: I* d* N6 f# x8 \- p head=p;
1 s1 j1 _) T+ m3 E2 y# q/ R for(i=2;i<=M;i++)
5 W' H/ r; P8 D7 H" w+ q { s=(MONKEY *)malloc(sizeof(MONKEY));
8 y" K% q0 C: x J& @ s->number=i;s->flag=1;
% ~& L8 ~0 Y8 p3 S% _! g# c9 w s->next=head;9 M/ N" ]5 J, f, S4 @) z
p->next=s;p=p->next;
! W% I' F1 T# C/ s }
" {( e! J; k2 l# v+ X) {$ C4 P! U p=head;
& |: F" B2 w0 f7 `$ M7 f8 _: l; n for(;;)/ j' o* ^+ Z5 h9 \7 e, W
{if(p->flag==1)
5 X! l1 Z5 Z+ y# V( G3 ^) l+ x count++;: \: Z/ N7 Q! a- B/ J6 U6 z9 {. n0 P
if(count==N)
6 Z! D2 K( t) L9 D' L, M# Q3 S2 ?. [ {p->flag=0;
, X2 i6 G2 q. C) p4 w count=0;3 p2 b R, e. y' o1 U
sum++;}# v( P0 O) I6 R- d; c" L+ I2 K
if(sum==M-1)% s4 Z7 Z( t) E, U' V! O2 t
break;
/ e2 D- R" j; V, L; n5 ]5 C p=p->next;
4 x& |2 Q! P/ W, a" s6 b }8 I# V9 i j: U: X) o
p=
# h5 T X# h7 x; B) Q! N head;. S2 m, U+ `( t! a5 @* k5 _
for(i=1;i<=M;i++)
' A) d0 b7 |0 Q1 q2 y6 {3 C4 o { if(p->flag==1)
* D7 j$ p# `! v+ B6 E printf("\t%d",p->number);
+ K2 u/ g% V6 |$ g8 Z% ~$ [, U& W p=p->next;$ B7 E. `' w8 {( d: }4 d- L- t7 g
}
, Z$ K; J/ o0 I) l
9 i! d3 ?" u2 N5 j# t% C2 F3 w2 ~$ |( `2 U( K4 d
3 n+ C; o- g. U. d" ?% q- }
} ; p# n @2 l( G9 D+ v# k
第二种方法:数组2 L. C" p! |! L) V. S2 I
#include<stdio.h>
( ]+ k, d9 _- P% s#define M 8+ n5 r$ Q \7 |' B
struct monkey d# h" s" W9 l2 U, |7 `
{int number;6 h+ a( ?7 d2 |* H
int nextp;
0 \3 q. [: F& j) F}link[M+1];
: q A7 m7 A7 [
. y- i5 Y, ?; U3 ^3 G( ~6 J+ tvoid main()
! E; o5 R6 Z: u. _{int i,count,h;
6 ?( ?+ o8 O4 D9 R- v& @8 g' tfor(i=1;i<=M;i++)
- Y, G: {, C8 ~- H5 C{ if(i==M)4 W5 I, v" C H" h
link[i].nextp=1;4 r6 K8 T5 v9 X, a4 _1 s3 t
else5 s( f6 x: q3 [6 ]
link[i].nextp=i+1;, T" i+ h4 W. l- v3 \
link[i].number=i;# ?$ g- O d3 [8 T) K
}. r( Z# i4 k$ Q9 m% |* A, _
printf("\n");
" z6 X; L8 F1 B/ Icount=0;8 [* X, P, }. |0 t b/ l4 K! R. S+ ^
h=M;& k% r* r) Q0 u. S9 M
printf("依次退出的猴子: \n");0 t4 n) C7 ?6 K, d) T6 m" ]- h
while(count<M-1)1 X+ l( V9 X7 O& @( g6 z# w
{i=0;7 d& y5 X, s' t" \
while(i!=3)
! ?: y5 S: p) P2 j& L; C+ s{ h=link[h].nextp;' g8 B) ^9 a# r0 {+ s& C* u
if(link[h].number)4 a, c0 I1 ~: c% {
i++;}
# O! l3 V6 U; y5 d, G$ _! r
6 B: Y" \& {& T0 \: m* L+ yprintf("%4d",link[h].number);
" u0 n9 E2 F* D8 S- Olink[h].number=0;: u& {/ g6 [- C" \ n
count++;
6 y0 e j4 E x7 n5 b% D}
, i; G! v+ H1 w x5 e' W* y4 t( r
$ O$ r! J# }1 o6 O s! R& f+ Yprintf("\n大王是:");
) _3 R5 `# ^) C6 p2 J for(i=1;i<=M;i++)
4 D$ d5 y( S v( x+ A if(link[i].number)
; T+ C6 y* _" ~0 Q0 n printf("%3d\n",link[i].number);
3 z! ~: Z3 }, M% l' y6 t; r! f# {. m; M9 I6 y( O' C
; \+ s5 m5 O5 q# i# g$ Y3 h3 a
} 5 |. X1 p( b7 }7 W, T2 {7 q
第三种是普通方法for循环
* c$ Z6 X' @/ G4 Y$ Q$ y! n% a#include<stdio.h>
/ a( w, ?7 `% i* nvoid main()
' V$ g- {% V5 a8 U{ int i,k,m,n,num[50],q,*p;2 W- [7 }! K- U+ \* w/ I3 q j
clrscr();
& w- i7 U- S: d. D6 W) n$ \ printf("input number of person: n=");
1 H1 u! G4 x0 e Y; ] scanf("%d",&n);
& J( O& d- F# C8 N1 K" R+ Hprintf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只
$ h* I& u) x& f5 u Z7 Z scanf("%d",&q);
/ q% v% |: O. `2 V+ Z, P( T* k6 Z p=num;
1 f: z: G( _4 Z9 [( v2 T for(i=0;i<n;i++)+ G3 l: E2 g/ T# y( p5 Z
*(p+i)=i+1;
& g% ^5 W9 y; P% q( a5 V1 \ i=0;, N+ S3 |/ {/ N8 O; h
k=0; _( i$ q( j* `0 ~) S4 ~4 h
m=0;
$ d7 @% U+ h6 u2 i% n9 q while(m<n-1)" U# k* Q ~2 p
{if(*(p+i)!=0) k++;
, w l& W" h# K7 _ if(k==q)* u+ }( z, P: G4 y8 e3 E
{ *(p+i)=0;3 f- R; p7 v) h* @/ L: c
k=0;% C$ q# z S0 q# K
m++;
. H/ Q( H/ U- T1 i7 B1 @8 V( ] }
, B3 O4 ]& P4 v$ ^ |* w+ h i++; u$ D$ y Y0 @) K; I
if(i==n)i=0;5 Y+ |0 \) N& e! \8 B h' z. j
}
& L0 a1 ?5 |$ ^ while(*p==0)p++;( W5 B* V" [% g6 g# x
printf("The last one is NO:%d\n",*p);
' E1 h' x$ c/ `4 V. }. m1 N getch();
) `: o- P9 p' Y8 c/ O k7 _8 A9 F" ]& F
} |
|