|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!
# U$ O0 }4 g4 ~7 [0 C这几天我在忙着编一个问题,我用了一种方法编出来!* L$ ^$ L& V F+ S7 w& B* ]
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
c$ k; H/ L( E& e5 y! p注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
- ~& {+ ~ A" t5 f6 B' j8 K4 q
8 H3 [: {2 t6 Y5 m/ u/ Q5 V# N: z: t) C( B" x3 x# K6 M
题目8 l) W! r8 c: d, y4 E6 L* V: U
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。: X8 b- }$ I3 F: Q& [, Q% B2 h
第一种方法:利用循环链表
! r+ [$ @8 h5 b2 {#include<stdio.h>
9 e6 E6 q. ]; s: N6 ^. @! ?1 n7 }$ u#include<malloc.h>
( M) ]7 W8 k. | t1 S0 Q#define M 8 //共有8只猴子: T0 ~7 k& s3 M$ Y8 m
#define N 3 //数到3只时退出第三只
8 B2 {/ _2 Q. V; G8 C. E& Atypedef struct monkey
4 N c$ ]' G6 _) M9 h{int number;7 y) C/ v, @% a3 D5 b( [
int flag;
2 {, ?: r$ e8 f6 b* Astruct monkey* next;
9 M- q. z: X- D# X0 j}MONKEY;
M' E3 f5 o4 V: Jmain()3 t) N# S, ^: u- S4 h( H! R' c
{ MONKEY *head=NULL,*p,*s;
$ o e6 j4 O% Z int i,sum=0,count=0;
, e* v* X- ]. \3 ? clrscr(); //清屏
4 M, a5 ]" p) p p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存
& W' J$ n- q, b( s! V: \ p->number=1;p->flag=1;7 ~( x! G+ `: }& y
p->next=head;
- ~! f5 Q4 I; ~3 ?- {8 H S0 g$ u5 h head=p;
" K k. i0 P `; j6 W: V5 U- i7 L for(i=2;i<=M;i++)
# F7 O0 D0 z$ c, b { s=(MONKEY *)malloc(sizeof(MONKEY));
: R* ?$ h" r( h' j& N s->number=i;s->flag=1;7 @7 x7 G- `+ c+ ~: ?5 k! ]
s->next=head;
5 m: a/ k9 _/ {! y p->next=s;p=p->next;
& { i" Q6 K6 a }
' m) l! O& w+ M p=head;
% B; r n/ a" v% r6 d for(;;)2 _4 `1 R' Y y( j0 @1 Q
{if(p->flag==1)6 {0 M1 ~. ^/ O' ^$ T# D+ i* d
count++;
5 S" ]- t. c! r( D% z! a! @ if(count==N)
. [9 F$ a& U$ z- b {p->flag=0;
) @% i5 H. Z8 o, T% D1 r0 g count=0;( L0 Y# V- w5 h, m" O
sum++;}* P# z4 t; q8 y. _" h$ O
if(sum==M-1)$ N! t* L7 D5 A$ N. v
break;; c( E7 r' q1 y4 H
p=p->next;7 G- k( _- A: |* Z
}
9 T' p P, t% B, g& N0 g- o p=: s7 \; m* @1 F1 b2 B2 a
head;
4 s. s& C( ]. G% w# F; v6 }" G for(i=1;i<=M;i++)
; ^, z0 ^9 ^; u& E! Y& H { if(p->flag==1)
& N' h u# M6 ~- K2 v' E. j, ^ printf("\t%d",p->number);# F M* j8 ?* H3 ~5 @! O
p=p->next;" u( e. p K9 Z" P% b- a) X
}
h" R$ t9 t$ q. m) w8 {- b4 }* }1 y4 e* D3 I& s
) n9 v, N! M# y P* j- p5 y/ d/ Q! S7 Z& ]5 G$ b. y
} 6 `3 m0 \$ h- g$ j
第二种方法:数组8 V3 C% L# B' E3 }$ V( |
#include<stdio.h>2 Q& r- j2 F4 n6 u7 {1 v
#define M 8
1 D" {( a& o' V3 B2 F; |9 G2 m# p; Astruct monkey; b8 `# g( I$ P+ R- J; I
{int number;
8 I" H- h7 w3 ^3 L9 n; }int nextp;( T, p3 S1 M9 ]! E& m; \
}link[M+1];, m9 @' n% U4 f4 u6 b5 ]
; n& n4 K* T1 O( r: Q0 D( ]: o
void main()5 z4 X2 [$ s2 g9 ~
{int i,count,h;
8 J. q% j: H r J8 E: Z9 N! p, h2 sfor(i=1;i<=M;i++)
, u F# Q; S- e, i" t9 n% h$ m; U! u{ if(i==M)8 x- V3 c9 f, Q, I- d
link[i].nextp=1;
' C/ } \1 U) F" o( Y" F' w9 ~; } else) g |7 \( ^6 S' A% z9 v
link[i].nextp=i+1;
& h# e; K9 q0 |" H$ R link[i].number=i;
* n0 l$ C" e5 K1 R, f6 j: c0 S}9 W K6 |$ w d2 N6 h9 I6 C
printf("\n");6 T3 T* s% q2 C7 H
count=0;) E) |; g% b% f
h=M;
( q- Q! H8 O8 y7 L# H$ a" tprintf("依次退出的猴子: \n");
% n# }& O1 T# w" Zwhile(count<M-1)
, I' h3 h- X/ `1 e n3 E{i=0;5 a2 @6 b9 ~( U& [ O
while(i!=3)
, e; B+ q5 ^4 }# d$ _3 t4 B{ h=link[h].nextp;
& _ Y2 d% w3 ]7 A if(link[h].number)& T$ }- i' W8 D; W- w
i++;}9 e8 u' d7 F" W; [, _; `# h
4 y" b. f6 s4 W7 N% C& W) c( Fprintf("%4d",link[h].number);$ o; K1 z7 m5 Y; n. n
link[h].number=0;
5 I$ |5 V4 p) T" _9 qcount++;7 n' ?! A) p: G Q3 B8 X2 h
}6 I; o- B$ z" X4 Z, l5 E. ?
6 a; B5 }4 _ O0 w+ |printf("\n大王是:");' l. N4 K5 i0 e4 T/ ^
for(i=1;i<=M;i++)* Y$ F& o" S4 ^. z& L" A
if(link[i].number)5 K( L; Y" X `9 ?4 r: I+ X
printf("%3d\n",link[i].number);7 @( O/ ^; _% M9 i I" E3 x& \
& q8 B/ @. e/ C# s! j, m
1 c8 J/ A" i9 y$ ~2 k2 L
} 2 x6 J2 N/ x6 n4 H% Z
第三种是普通方法for循环8 d) [6 f, O/ S; H) I h% {
#include<stdio.h>" g9 N# [. k% Y. N: ~* ~% [
void main(): Z: {0 i6 e0 z7 m M: l
{ int i,k,m,n,num[50],q,*p; H; Q. s2 V) F! P/ s* Y
clrscr();% |' Q% G D' t
printf("input number of person: n=");/ U$ T3 k! X% Q! d3 @5 G& T
scanf("%d",&n);6 P7 M8 r6 o( r- R
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只 R( G4 m/ |' l$ Y7 x h
scanf("%d",&q);
, c# o+ l. m! b) U3 a4 u- ] p=num;; e6 n$ W) R& q9 F( J j+ C
for(i=0;i<n;i++)
/ S7 `- N5 Z2 }; v$ ?3 j *(p+i)=i+1;3 ^0 \/ D& a4 I1 c6 O0 ?+ Y8 v
i=0;
. B% o+ l! {1 b% E3 M- B% _ k=0;
* `# ?5 |8 q. y V X) H) L m=0;6 S9 p% u6 Q( _" a: L. r+ a
while(m<n-1)
1 t3 R: r V M2 i8 } {if(*(p+i)!=0) k++;
. z8 j& C% J! I. a/ A7 m, r if(k==q)
# i6 h) ?8 @- \9 ]7 n { *(p+i)=0;: h) O3 m, n8 Z5 _8 ?3 C
k=0;
, f8 a4 V' M7 r" \4 t m++;
( e/ h% H$ l4 ]3 K- W% k' N' v- g5 C }
2 h( ~; f, y; O U( P i++;
6 U/ }: y9 h: S0 ]# l) K1 [2 n9 n if(i==n)i=0;8 [# p1 X. w+ D' F t
}
5 v. R! B% Q: ~/ O while(*p==0)p++;* M0 |& l/ J4 }* T# f
printf("The last one is NO:%d\n",*p);& w0 P D8 }+ K4 k3 B
getch();
; O' P5 v- N. T: n p: Y
) p8 S: q: ~8 h2 @7 |5 F} |
|