|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!: n+ c( x/ C) P" S- p Z" W
这几天我在忙着编一个问题,我用了一种方法编出来!- L0 W( _' X/ S1 |$ d
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!
2 u0 d( j4 R" t! u; k O注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
Y0 l" j5 E- S- j1 w8 _6 X$ H/ N x" b
- K p7 q- U& ^; i d
题目& F) R1 N, M+ @$ [- |% @
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
& Y# B( K* V1 @& E* ]& S* G7 a第一种方法:利用循环链表2 `$ u) b4 W$ x! }, N/ l
#include<stdio.h>
3 m! Q, `2 I! |2 u#include<malloc.h>
) S' R# ~8 C) n# v#define M 8 //共有8只猴子- a9 e/ G. {3 u$ b
#define N 3 //数到3只时退出第三只5 Q T) X3 K8 |$ Z" A
typedef struct monkey
8 a! R6 `/ P0 x) O0 h( P2 x{int number;3 |3 ~8 q3 `- K( b; p+ Q
int flag;
4 {; @, c# @4 ?! ^ g% B8 D, b4 |struct monkey* next;2 r* A) E! S( r n0 E
}MONKEY;! K* a' [9 j. { t
main()# C C" Q: i4 c- t' Q2 {
{ MONKEY *head=NULL,*p,*s;( N# i c& U& p0 H2 r. Z
int i,sum=0,count=0;
+ |% g% G f. `. [ clrscr(); //清屏
/ }2 D& @/ |; o# I' m p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存' R% e. b$ q2 I4 O
p->number=1;p->flag=1;+ Q4 W3 E+ @ t) C( B2 _
p->next=head; B' y7 y Q5 ]% b; t1 f, T( G" a
head=p;/ ?6 Q% E# R" a+ g1 w% R- R
for(i=2;i<=M;i++)
) v+ T7 _/ |7 ^' F2 I9 f { s=(MONKEY *)malloc(sizeof(MONKEY));, \9 X& T. f% }4 o
s->number=i;s->flag=1;9 @- [ z; i U* Q. H! o
s->next=head;
: ?0 y0 Q3 \% q2 d4 v/ J6 j8 t p->next=s;p=p->next;
. I/ l" k( V5 n$ W( q0 u* J* _ }
( h% J q3 l3 x p=head;0 U! C( [" Z; N/ W! r1 O4 l
for(;;)9 b: l! E C/ ^) d7 K+ h
{if(p->flag==1)3 M. ~3 X2 |4 e2 K; X
count++;2 F% h4 o- e- s* `$ S
if(count==N)
; _' {* z0 h4 O% m# c- u( w {p->flag=0;- F" l9 [9 x* `' ]) {
count=0;8 `9 w4 v, u& ]. }1 ~' _
sum++;}* e) k, _1 U. Z% `7 p: A$ \' q: o
if(sum==M-1)
5 G' a4 [! F( u break;
) r* k1 c! l/ }4 i7 Z8 T+ Y+ s3 m p=p->next;
/ j ]* X7 n$ e7 x+ {/ X) ] }- U" Z3 y, u! c( a C) [' B
p=
/ C. L- M G4 U; \ r5 Z/ e8 C head;
V- y9 S# b+ h# ^! |* b* V for(i=1;i<=M;i++)
/ v9 |% t1 q# c% O# _% e# x1 d _ { if(p->flag==1)
" Z/ l3 X4 B! o8 a1 G printf("\t%d",p->number);9 H- d- k$ e. S0 L6 m* @" ~
p=p->next;
9 z; \# s0 F0 ?; }9 p) r }% W4 n) I8 q O1 z% D* H8 r7 m5 d& Z& ]% M
$ h8 m# c; [1 j8 D
. f8 c3 F: i4 I1 k( `. d l% w( r- l
# \" @. C& F C4 [& V# d
}
3 L1 Y6 [1 {0 s5 H第二种方法:数组
6 Y6 |4 v* p G+ ^1 j# e#include<stdio.h>
# ?* m( \1 ^1 I$ p#define M 8
0 ~- W3 v3 S1 x- E4 vstruct monkey# n$ J4 G5 U2 \
{int number;( h& W4 |! j- u9 C. ^ J
int nextp;8 j; q# c, P0 ]5 ?' S! j5 _
}link[M+1];; ^, q, S; l! w3 T3 r b& b
& J& i+ l2 O! T" b* l% K6 ovoid main()
$ }- `/ h7 l; ?$ t{int i,count,h;5 z. t( T" o+ p) P0 a2 Z
for(i=1;i<=M;i++)# g! Q1 P8 T0 r# _1 d
{ if(i==M)5 Q* f/ p8 b) R& B6 e" h! I
link[i].nextp=1;. ~. o5 a7 [5 Z/ j- o& D. @
else/ c: M& U% c5 O
link[i].nextp=i+1;
0 Q' @7 X* w C8 s link[i].number=i;; a+ w* j2 G1 ^. A/ b
}8 c' [5 |5 _$ C" r0 ~7 X
printf("\n");3 [" r3 U$ Y$ h$ d" w
count=0;1 C# m9 D% q0 s8 Y
h=M;
( g# o, q2 a; X# d ~$ {6 F( A6 Vprintf("依次退出的猴子: \n");$ o+ V# h; c' h* n' ^' X Y* I
while(count<M-1)
. l0 f9 g7 ~ V7 E{i=0;
) o$ {2 G1 W z. c' T+ Q* ^! r8 S3 Owhile(i!=3)
/ z' r: ~+ b5 P2 x7 J0 V; i f{ h=link[h].nextp;$ g5 j7 x" I0 H' D
if(link[h].number)2 i) S& g0 _" }5 y7 W
i++;}) M& V+ j1 z/ A8 z7 S5 R# P( F
7 f j: G6 l9 f7 o3 {! |
printf("%4d",link[h].number);; f7 @: l$ q4 r# _/ X. R& {
link[h].number=0;6 T9 W* G# H: ~* `# u
count++;
$ L- R* {7 Y8 e6 H! r2 I( O}
- m0 p1 `2 p; _8 b" t( ]- O# t P4 X* N; J" N
printf("\n大王是:");
" U7 c5 y5 J; Z u for(i=1;i<=M;i++)
1 `! K* b; N" h& } if(link[i].number)
, W( d7 r8 ]; q9 j# L4 T* v: I printf("%3d\n",link[i].number);" w$ _' ~! w) h, T9 @7 p
! m5 z% D4 i h$ f
2 R% v% U" v: x: k% h# y} 8 a- t# C0 ^: W$ u( u, x4 Q
第三种是普通方法for循环
. Y5 ^) P8 A. S k# h- K#include<stdio.h>1 `1 G L, J5 w- Z3 g# t$ o
void main()
* P+ i8 R9 y* g7 f! c{ int i,k,m,n,num[50],q,*p;3 I9 y, C3 `! F& r4 k
clrscr();
2 R# _9 z3 L" f% o" l+ X printf("input number of person: n=");4 P5 |# B, L5 C' N* n. x
scanf("%d",&n);; F/ r$ K( ?) p/ g
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只& J# [' k# r' C" G7 ~
scanf("%d",&q);
: q! B1 B8 k4 G* C p=num;* b# O8 U5 o8 K4 S, e! d
for(i=0;i<n;i++)
/ _8 l$ o0 j' X1 Z5 d$ T *(p+i)=i+1;/ M& i! c9 P: _) j. v& F
i=0;7 _& v( r6 C3 p4 r% W
k=0;" T. M7 M& P5 X- Q7 t+ `
m=0;1 @& U K2 D0 `1 Z4 p6 v1 l1 |
while(m<n-1)+ x m: a, O; S7 u" }; O8 \
{if(*(p+i)!=0) k++;
& D; S0 n$ X/ Y5 b3 U$ t if(k==q)
& @1 q$ A, C/ m3 i* L { *(p+i)=0;
) ^! d- _, _' P* _) V k=0;$ [, Q; l% R2 N8 M! a" e, T5 x
m++;, J" \4 J! S3 b y% O/ b
}- s- ~( B' Y9 r5 |" F- d% b: k
i++;4 C/ d5 C2 x$ s( k
if(i==n)i=0;
7 I; r: @7 z% `' ~3 v; h }% P: R8 _. f. v5 O9 \1 W
while(*p==0)p++;6 B1 Y" }/ l# O/ O; D% F5 D
printf("The last one is NO:%d\n",*p);/ D' A; O# N* k* M1 T! W! g
getch();
0 G4 d1 N, g2 L" L+ f5 v
# ]; T# X/ b8 i* Q6 E% h2 D} |
|