数学建模社区-数学中国

标题: 算法入门系列之一 [打印本页]

作者: matrix_spaceman    时间: 2004-6-6 13:18
标题: 算法入门系列之一
问题:编程打印下面三组图形:
( ~! o4 p4 g4 @9 A8 C8 q  ]1:
, w& }$ R8 w( `
2 {, ^0 q% o! a$ S, H*
: Z' t: |: _& E. f8 `; E  c) I2 c**2 l6 X; f3 t8 g! @( {. Q' `1 g
***3 b1 Y; e5 h1 x+ s
****' M/ R. c5 r2 c: U' Q6 B
*****  L6 I+ J* a' k. E" _( S3 x$ Q; P( O
******) {! o' l( B9 }3 @- |9 {

6 x3 {* a& n7 e# {程序如下:
( Z# @* M" f9 `2 G
# k+ o& t9 c- Rvoid fun1(int n)6 C. j, ]& w1 ?1 H- B$ L; t4 h, _' |
{' D7 E8 }+ b' R" U- c+ u
    for ( int y=0; y<=n; y++ )
8 ?. f$ M' X) J    {8 P. V/ M$ M: t# K" G& J/ E2 E/ ^1 a
        for ( int x=0; x<=y; x++ )//注意此层的终止条件与y有关$ O; M2 g! C# u7 I/ R0 X9 b' e" {
        {+ X2 J2 D: t! H  u: {
            cout << '*';6 Y; [* ^# s2 ]  X' t
        }
. D8 q. |- e6 c0 l) t% r        cout << endl;//换行$ N8 N$ q9 m/ H: e. }1 x  q
    }& R" x& i$ d; {1 r
}
9 F( i# x6 {% u0 v9 ?- x; k7 X" c2 D2 a$ f  i5 Y9 f
2:5 `' u+ O- G8 q: U) i
----*----
1 V0 L- Q* J- T, z---***---2 C1 R7 m# S; L0 v5 M' a6 O9 Y8 i
--*****--
, g, L% q' U6 X+ m-*******-& f# I& j" m) z6 J  _6 Q% z) a
*********! L3 b: u# B% a+ ]
4 ?# u1 C7 b4 C5 ^8 W
这组就复杂些了,每一行都分为3部分,应该分别打印。0 f' B# K1 ^& P) u$ Q. X: G, j9 d
程序如下:7 o: x$ I* Z5 r% T
2 x- o, I% e6 Z8 t# J, p0 ?( Y! k3 g
void fun2(int n)
6 x6 w. w# u+ J{
% o- l1 K  J  y5 F    int s,x,y;3 V4 s# N! O+ T4 U' _- H
    for ( y = 0; y<n; y++ )
) K; Z3 ~: o# v7 a6 e# y    {
& e3 R5 o7 x: Y+ C% c5 H        for ( s = 0; s < n - y - 1; s ++ )  // 确定开始的'-'有n - y -1个是重点6 F/ m) T8 r3 }+ F- w8 k- D
            cout << '-';
) `6 p, F) I. n- ]7 d. W) a        for ( x = 0; x < 2 * y + 1; x++ )
2 L1 g3 X9 E, Z            cout << '*';& _6 P: N9 u4 k! t
        for ( s = 0; s < n - y - 1; s ++ )//因为左右对称,直接将上面的搬下来就行
) b; }: ?# V& G- P( J% O            cout << '-';
$ I" n% C: `& Z- ^        cout << endl;
  V( {* M6 c3 `, b- C& n  y' y$ n    }
5 S1 O  @6 V- F- o}0 V! t6 v3 v7 @

+ l4 }+ L8 s! ]5 o3:0 y0 a1 \0 Q) q) m
, H* e! c2 L6 Q" J2 c( [/ R
----*----
2 E& c8 E# Z, t, @---***---
* n$ x# b" l! l) P7 V+ X* S0 O6 g--*****--2 }( u3 ]) n7 M" \9 ?7 p+ k
-*******-7 S  L# ^6 J+ ?. ~: I4 J+ L
*********6 B3 p- H) R1 H- J$ R; M
-*******-
5 D- D/ T8 N' m7 e* u/ n: P--*****--, c! S% k! s) {0 H7 U) b  T
---***---
8 m- U  \' U" n" T- c----*----8 X% x) V) [) k" y

  a3 I9 Q2 L/ A: ?% u这个图形就较为复杂了,观察发现,上半部分与2相同,下半部分将2中的图倒了过来。所以只要写打印下半部分的图就可以了,这段程序也可以通过对fun2改造来实现
9 ~5 e( e  d/ j* c9 \0 v打印下半部的程序:0 ]# e$ R0 j( z/ Y
void fun3( int n )
  d- g0 L* C6 [! w8 V% c{
: G+ }0 y3 u$ R    int s,x,y;8 Q* O8 p7 m% O" T1 c( h
    //将循环的过程到了过来,注意开始y = n - 2,而不是n-1,至于为什么,自己试试就知道了7 s; G6 S2 e4 w) F+ Z7 t
    for ( y = n - 2; y >= 0; y-- )  
; [% s3 E7 j6 U8 D+ \/ P' N' q0 E2 Q    {1 [4 g# f+ ~& q2 _* B# A# o  C8 R% s
        //循环体没有改变% I9 V1 }4 u  Y
        for ( s = 0; s < n - y - 1; s ++ )! W- x* k% y0 K! S) M% C
            cout << '-';' C  F  D$ d: y) w% Y% l
        for ( x = 0; x < 2 * y + 1; x++ )
: {2 H  W9 O. Y4 [            cout << '*';
5 `! y- K5 m( t/ h1 i( ]: {$ b8 E        for ( s = 0; s < n - y - 1; s ++ )9 ?2 v+ ]' r! v2 A6 Z
            cout << '-';
! l' [3 }1 K9 d$ ^# j% k        cout << endl;9 t2 l; E5 K2 |: M' p, F- u' p7 ]
    }
. s4 \, x7 m+ ~  d  C}
7 h: l! I& Y( P* u9 s
9 T  W- I* U6 @6 \8 E要打印整个图形:
( T& _6 t4 z6 n# o/ M* c1 D$ O5 Q4 O; b! U5 ?/ }
void main()
( L& n- w8 @* {- @: K6 R/ K$ l{+ D7 r, ~. S% N; Q
    fun2(5);//绘制上半部分
5 L# T7 o( {$ L    fun3(5);//绘制下半部分' ~6 h' w& c8 u/ F$ M5 A
}
: H+ z- R4 s+ Q- @5 F* K$ [4 S2 d( B" d
6 C1 j8 g/ a  W2 |" Z
这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流.
作者: Mouqx    时间: 2004-6-7 12:46
<> 这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流.
# E3 ?6 v) A! s$ E( ^) m  a</P><>
</P><>支持</P>




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5