|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好!4 e$ y% i8 c# ]: P' `
这几天我在忙着编一个问题,我用了一种方法编出来!3 s5 r* V3 P& g& j/ Z" x- q: `2 A
但是当我编完时我去看书! 发现许多的方法 我看了看,拿出来与大家共享!还有附件哦!" N! d1 C3 t' T4 x3 }4 |- P
注意拉!第一个是我的原创哦!!!!! 如果有什么不对的地方请大家指点出来,本人不胜感激
# V, P8 g) z; Z( F, A' ^
) w: l; ]* b/ K% [$ g5 l E- S# C. N
" Y( L9 t! s3 d) t& } 题目 E( O" V" [$ |/ {+ {. j
山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是大王.输出大王的编号。
0 [$ j% J2 x6 O第一种方法:利用循环链表3 J3 B! D/ S, a2 O, S
#include<stdio.h>+ k; P g, o) e# q
#include<malloc.h>
! R6 O) E: G' C6 ~* |#define M 8 //共有8只猴子
7 ]- M/ d8 B' ^% T8 ~0 F, I* c#define N 3 //数到3只时退出第三只
/ U% G: D+ p, ~1 H. C( mtypedef struct monkey+ w) ^% b, G7 R" E* r- |- M
{int number;
' E0 J. h. T" S0 o& ` o% Rint flag;
. T9 u4 h4 z1 A" v; Pstruct monkey* next;
\9 O) g$ o8 Q, V5 x, Q+ ~* ]}MONKEY;
2 [8 ]. O5 j- C* C4 L$ }/ _main(): U# r8 v: d! r
{ MONKEY *head=NULL,*p,*s;
: \5 U H& F" Y! C$ I. R1 |" Z int i,sum=0,count=0;; S/ @9 [2 L9 m4 @) r
clrscr(); //清屏
$ V" d7 @" H9 H8 U p=(MONKEY *)malloc(sizeof(MONKEY)); //分配内存 O& T/ @, n* h$ _$ _
p->number=1;p->flag=1;9 w. j; l7 S% v- [& g; M6 X
p->next=head;
/ T, v7 n2 b2 O head=p;3 d+ ^; D7 b& W8 Y
for(i=2;i<=M;i++)) x5 k! S9 n0 _7 Y" v0 s
{ s=(MONKEY *)malloc(sizeof(MONKEY));
- \( M! F6 S5 q/ m0 h S/ K5 x [ s->number=i;s->flag=1;
& }% {2 R& S. D) m, i) I0 Z s->next=head;
+ s2 P% d$ V' ~+ z p->next=s;p=p->next;
8 A" E/ ^1 b4 `5 z# g }
4 O: ` A) m( @4 n' m: j p=head;8 T5 E: ]5 c& G
for(;;)
; ?' n( U* N& G {if(p->flag==1)
$ x. j3 F& q' y9 I2 i; h! x count++;
. c# I9 B% j0 r" ^: i# } if(count==N)6 `) y. l% G/ u/ d5 V" S
{p->flag=0;8 L* _ S( @; d1 v3 ~8 ]0 o' l
count=0;
1 y, l5 ]- k5 E( ~2 [ sum++;}
. W2 o; ]3 c( `; O* M, Y( \ if(sum==M-1)
/ i4 O3 ]+ g v2 y$ _ break;1 x- _1 I" v1 T
p=p->next;
: u1 R) T% Q" }5 i% h/ r( h }# L7 B. _2 o, y b
p=
: c$ D& J$ k5 a3 j1 o! I head;
# A5 d+ |3 X4 c for(i=1;i<=M;i++)( n1 y8 D& f3 P5 V
{ if(p->flag==1)
( l4 H2 B/ _" X" ~9 T printf("\t%d",p->number);
; r4 _2 s* B s0 Q p=p->next;$ ]0 `+ e, j% I% F8 p1 L( U, p& a
}
: ?' q" k" N5 i% e& _* A" U( ~
n6 `9 b3 [) l0 X; J3 \
# t5 V% u2 h9 P. F( w1 f
1 d. |! v. U l; w0 A} , G# t) D3 j% V1 |
第二种方法:数组
( R( N5 {% }. a9 ?6 w0 e#include<stdio.h>8 g o9 |9 i! Y1 j& K2 r7 ]
#define M 8
; n3 S( {- B" r S- G# [struct monkey
* ^( L$ b1 H* e- I) F4 [{int number;
; s- \4 [7 {; L+ o: J" `" Lint nextp;$ u! H5 Q9 X$ { k" A* ?
}link[M+1];- L9 R+ S% b# ^0 j. \
+ K2 h) E9 a6 c/ s
void main()$ g& y7 r1 Z& Q9 ?
{int i,count,h;8 y- t. H* z/ u1 X5 h
for(i=1;i<=M;i++)
, ]% m' s" i. |0 \6 d; L% a, D. e{ if(i==M)
& @( h* p1 ~. P link[i].nextp=1;
d9 h# T( r ? else
: }2 H7 i c. @ link[i].nextp=i+1;8 d# @& y- S4 N' Z# ]
link[i].number=i;
/ k! d$ E5 i }# p}7 T, {+ \. m* o9 w2 d+ P
printf("\n");
. X6 y! A7 P9 o, @/ z Rcount=0;
6 v. \' u, m Jh=M;
0 D% {6 R5 P7 J: S8 }printf("依次退出的猴子: \n");/ G6 @/ V' U/ r
while(count<M-1)7 x3 z$ ~( b& Z2 m# j C( O# v$ S4 g
{i=0;
" C9 ~3 X$ s Z. V; G+ v9 \while(i!=3)8 [. k4 J7 s( V0 w3 b9 U
{ h=link[h].nextp;
/ H5 k1 J% a; b0 @; { if(link[h].number)$ e2 s1 Z6 i2 T/ R) E& ]4 ^
i++;}
}& P+ e0 r2 h
" F8 P7 {+ @2 t0 Oprintf("%4d",link[h].number);
3 K( R9 Q9 L3 @link[h].number=0;+ |1 |2 K8 P7 `; u4 K
count++;# \1 i$ i- d* S) ~$ L0 o6 n4 \9 r" Q2 t
}( `" f7 B# P9 q* ]# J! |5 o) f$ [
; I6 Q1 Z. s1 m' R3 B+ @
printf("\n大王是:");" P) p6 i1 l+ S8 f
for(i=1;i<=M;i++)
# v% M$ Q9 r$ @! C! l0 k( J5 _ if(link[i].number)
1 Y) o# L6 ]6 l# e printf("%3d\n",link[i].number);
! O+ y9 M% C! t+ B/ o) I# p. v. E
j7 m% X- T: _, E1 X7 S2 I8 Y) B0 Y+ ?" r5 R o" x+ L
} 8 n9 |$ | b; `( k
第三种是普通方法for循环) B6 @' A" o( B. g/ V- o2 X8 ]
#include<stdio.h>& H5 v& J3 P* Q: z- E
void main()
/ M- ?, l1 E% H% l! T. B{ int i,k,m,n,num[50],q,*p;3 `, t7 F& M; k' }- o9 g
clrscr();
7 i$ q, r7 A+ C. ? printf("input number of person: n=");
/ k. m- N, P; E) S5 v m+ [4 Z scanf("%d",&n);3 V' Z/ t1 P1 A" z* u4 \
printf("\ninput number of person when how many monkey exit: q="); //输入数到q只时退出第三只/ A9 G) I! C# I$ I: V5 T) _
scanf("%d",&q);+ V# e, S4 b- M6 a0 ?
p=num;0 A/ y' e1 g0 O+ ~* \, a+ H1 Y7 Q
for(i=0;i<n;i++)
' z- P) C4 W/ z% ]. m2 x5 _' H *(p+i)=i+1;
$ s. _" a: v+ s$ E i=0;
9 W$ h# K" e' H. E k=0;6 K# O9 s- s5 o# L* E" f
m=0;
: l1 P# x& o- P! v/ r! [/ G5 R7 k while(m<n-1)* \5 Q# M( T$ I+ l0 x! T! Z
{if(*(p+i)!=0) k++;
; @2 Z' C% H. W* E* Q; A# g if(k==q)
$ c) ~! ]9 o- f' O { *(p+i)=0;; b' a( q t/ b/ E, Y9 R& F
k=0;
: E2 B0 s E4 l- J' v" w0 m/ R m++;
( V. T4 P1 l+ z2 h# _1 C }, N: O) q5 F( n. [# ?
i++;
5 l0 F: k# y: p- o if(i==n)i=0;
4 w) _* o3 F& t) G- T3 c }$ Y, H, `# r; J$ P4 P
while(*p==0)p++;
1 [9 F6 k) z7 H3 d- H7 V9 z printf("The last one is NO:%d\n",*p);* O8 j% i* V& L- p1 n3 b$ J
getch();; H: G5 e0 u6 t9 M* ^, j9 L
/ t- W$ d( P' S
} |
|