|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!8 k: G0 [* g- u0 y1 e4 `; \- L5 c. G% U
这几天我在忙着编一个问题,我用了一种方法编出来!7 w3 T; _1 t; r" F. ~- x
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
$ {( w5 o. Y) D4 y1 m# U注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激 3 H0 P/ S- _1 O7 O& I7 i# q$ o
. @; ^" v! F) _, b6 }! F' m1 p0 O \% n$ }; S+ [; p$ z
题目5 c; s* D0 b$ z( U( y0 x
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。; m0 S/ B9 ?8 @
第一种方法:利用循环链表
0 g* o* o- N% Y: O- Z& s- a5 e; [#include<stdio.h>
3 z g/ @2 D$ V" e#include<malloc.h>9 @, L$ E( O* J3 ^! l
#define M 8 //共有8只猴子
, h0 M, y/ b# }: c Z: T6 x& {#define N 3 //数到3只时退出第三只( l- N, b/ ]$ ~, g ~# k: s
typedef struct monkey
5 C9 z2 ]4 y) w$ A* n{int number;8 c: u: R: \8 [" P
int flag; l r4 P+ e& E# i7 Q0 [8 g
struct monkey* next;
, D3 j/ T# [/ Y/ V. }+ @- T}MONKEY;
, s) m- Z: A0 ^5 ^ w% i" ymain()$ q1 a" e g# N) y9 T
{ MONKEY *head=NULL,*p,*s;! l2 {9 V) |! }
int i,sum=0,count=0;$ v7 _# D* h4 S( O7 E0 M5 U; r! H. ]
clrscr(); //清屏
1 w& F6 P( d* @! u p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存4 e& J. r- U3 t- Z
p->number=1;p->flag=1;8 U( z8 ~" @9 Y6 Q, [5 ?" S& |
p->next=head;- H4 p$ z+ K4 \5 K* I
head=p;
" t8 k* k. d/ l5 F, G! s for(i=2;i<=M;i++)
. g% |; n }: _* ?2 [ { s=(MONKEY *)malloc(sizeof(MONKEY));3 \' p5 U, p/ m( V0 A5 l
s->number=i;s->flag=1;1 ~ h/ G" X1 K5 w V" M
s->next=head;! |. L8 ^8 z1 x S( w
p->next=s;p=p->next;
2 \* i# f ]% y7 y. F `0 G }
; w# P' z7 ^8 W- P) K% Q p=head;( B! t- z0 ^9 @" J/ a0 a' J2 ^) [
for(;;)0 S" A- q0 K& I! i- C; v
{if(p->flag==1); h. r! K2 C- W; J6 V6 E
count++;0 V/ O7 [$ h2 U+ u6 y4 C/ o8 `
if(count==N). I2 s# E+ k; H
{p->flag=0;8 V9 |5 O+ @3 I% S o
count=0;
6 k/ h8 I% @/ y% ?0 w; t sum++;}
' e+ f' j4 Q5 o if(sum==M-1)
; C. R. z, c$ a( m& f! h break;
0 W; q- K( U& Z4 N* j p=p->next;: P# U/ l1 G) M$ x; S: l) W
}
+ [6 B3 k& @/ w" |- h( s2 v7 o5 |' } p=- o' `7 \7 c" }% n5 d2 K H
head;
% s5 A; o* z5 v0 T5 U" P/ I( V for(i=1;i<=M;i++)
+ X n ~2 ]5 K4 s; ], x { if(p->flag==1)2 Q* J+ U0 i8 W5 n) R
printf("\t%d",p->number);/ v" E& z | E3 V8 n3 S+ _% _& L
p=p->next;; l. P3 N9 G! T" w+ x1 b; ~# n( ~
}" u" _. g1 |; y Z7 T
0 w1 x0 k' e4 I9 K+ h8 w( _! i- h4 P) I/ [# W
. I8 ?0 |) h0 t7 F) ~! c} 0 {" F+ d# U' Y
第二种方法:数组+ V# Z2 l: m* R( }
#include<stdio.h>$ |) a, y- M+ l$ T: {- o; B
#define M 8
7 @: `% v; S: o9 d* zstruct monkey/ D+ h: s6 J) s) ^2 L; Z/ t5 W
{int number;
( I4 Z- t9 s5 E g) N# u$ @! Q) Vint nextp;' \" I5 a( V7 L9 A; a
}link[M+1];
9 T: g9 X0 v- E( m# g
; k( |0 S- E d A7 C/ m9 z) Yvoid main()7 e! U. J: R3 \ Y5 x/ O$ q% m0 ^
{int i,count,h;6 s& g# B* b* d/ w
for(i=1;i<=M;i++)
: D) A3 A' J) \: G{ if(i==M)1 |) ?" s# b( h7 ~
link[i].nextp=1;
( S* j* @- b* T else
+ ]# o1 k1 ~/ R) W% M; \ link[i].nextp=i+1;# s- f, u4 W, ~
link[i].number=i;
+ s6 E3 g- Z; E1 {} F+ C$ [7 X' |- N; w) {/ K/ a/ g. g
printf("\n");
; v1 ]9 k1 O- Q' Z0 }" _count=0;
( @3 X' R# z& S ]# Y& W# f& Jh=M;5 k5 z& h, R) |* m/ V8 D" B. J* H
printf("依次退出的猴子: \n");
4 z/ ~$ }$ T& {" Rwhile(count<M-1)
& }. b7 A3 F& K4 E: U{i=0;
& z" H; Y; G; v, N5 m2 swhile(i!=3)
. N* y3 M1 e6 A5 e) Y2 {6 M{ h=link[h].nextp;
9 O4 a1 N$ \9 C7 | o! e if(link[h].number)5 b/ X/ h$ t t n' \
i++;}7 k0 a; C2 y9 d0 W3 d. H
1 z/ p; Q9 P* P! `' Jprintf("%4d",link[h].number);
/ z9 V( Y3 Z7 N: P' ^link[h].number=0;' M5 G3 |6 H, ^3 V7 Z
count++;
4 o+ x6 @0 T k2 l6 {}
1 F" p/ _) e7 I- @+ Z0 k5 C0 W2 H$ D5 f2 X: F; e
printf("\n大王是:");
8 Q3 f, G/ X9 d! f2 U9 U for(i=1;i<=M;i++) O7 R" m, y8 ?5 U5 E) x/ R
if(link[i].number)
7 J9 w# ^1 ]% q) q$ S printf("%3d\n",link[i].number);6 t. c4 J0 {% Y3 l B( r# ]
4 N3 E# [. q8 F# M2 w5 Z/ q" _
: N9 {! f, h- T. T3 C+ R$ p} " e" ^5 c& n# r# m8 g
第三种是普通方法for循环, o% ~6 q' U$ Y: g8 H5 \; E1 j& B& _
#include<stdio.h>" B. e" G# g! @/ [2 x
void main()6 L/ _/ }2 X5 g
{ int i,k,m,n,num[50],q,*p;7 f D" n) t- A+ @/ k
clrscr();* K# f& c! \* ]
printf("input number of person: n=");
- S9 E0 k" {% D3 B( A# j5 K scanf("%d",&n);4 x4 O2 ~# I: {, t! k6 Z! o* E9 O7 ^- H
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只6 Y1 f& g! T) f- u3 \
scanf("%d",&q);9 L! ~9 d! M0 ?6 }8 H$ @, X' a
p=num;
4 Y+ M4 `$ U9 `4 f1 I for(i=0;i<n;i++)
) c) g3 b$ j. }# T/ z( }. U8 a *(p+i)=i+1;
# `3 S) {$ U! f; k( _+ w! a" D i=0;
/ K6 z% j0 v- ~7 Z( Q k=0;
. z. J2 ~- i5 n* \/ `$ Y" r m=0;
6 b+ s X: Z' ~ while(m<n-1)
! S) E/ _, y! L4 o% |/ ?5 l5 J {if(*(p+i)!=0) k++;
" Y0 b' j: X) ]' s) y& E1 H if(k==q)/ C; H3 S) P! H' f. H2 C" m
{ *(p+i)=0;
$ c! O5 r- n' n3 `. m; V k=0;
) Q" U# B/ ^9 q( f& A m++;' w2 {# Y( Q: y2 u/ u* h7 ?) v
}2 h( H! S, G" ]; H
i++;: ?; }: y$ F, c5 n, m1 _+ P; @
if(i==n)i=0;
4 Y* ?! K9 n/ c9 E# k }* m/ x/ T3 C# e, a0 z
while(*p==0)p++;
" ~& b/ q; i/ ~, x8 y2 X8 S printf("The last one is NO:%d\n",*p);
- g, m' G! E$ Z% k# N/ i' Q getch();
# s( ]3 ~" ]2 V
+ n8 Q* Q! L6 r0 C0 ?1 `} |
|