数学建模社区-数学中国

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

作者: matrix_spaceman    时间: 2004-6-6 13:18
标题: 算法入门系列之一
问题:编程打印下面三组图形:
" _5 R6 G8 l, C* |  ]1:
1 U' H( ~* H5 C1 V2 B
0 E; w& z: F4 _6 H/ w*/ |9 D3 E) ~( S1 P' d5 F5 G/ d
**1 m7 |2 M: R" `& A$ @
***
2 H% A# F" x" T) \****+ [. B5 |6 R3 H  ?7 W) e
*****9 _0 `) O' _2 R. p$ _
******5 t( b; z1 ^6 ^. L3 T/ R

, v+ F/ G# k3 l4 X程序如下:
7 T# s2 s6 h& F3 K. N, _$ v" R' P: C7 d/ ^4 I
void fun1(int n)! s" I3 `2 k' S0 r# W9 M& J( l6 a
{
' `6 Q& C& ]3 S$ O& n! M" h8 Q    for ( int y=0; y<=n; y++ )
4 o3 w% Y, D$ i1 H: b9 {    {
' c! r% r  e' Y& q5 G- U+ q" Y        for ( int x=0; x<=y; x++ )//注意此层的终止条件与y有关
/ z5 c, \. a' A- Y& S        {
2 j& a$ `0 q4 {" F* l* ~            cout << '*';# H% Y  g9 W/ H+ z" m7 H0 F, J
        }7 S7 j; E: l$ @
        cout << endl;//换行
  d7 k& x" }$ Z" Y; P+ H+ k8 }# E    }  ~8 t3 i8 |+ P
}
# o; K% e/ D5 ]/ V) M3 m$ U3 w9 V, X4 k8 ~
2:5 y  n: t5 V: h5 S
----*----) s. R9 s* y0 Q& o
---***---
" U7 |0 i/ Q( O7 y) c--*****--
' F8 p' I/ U6 s0 N  Y' Q( j-*******-  a- _4 D" U" ^% O& V3 K: F
*********( M  l5 Y' s9 T* ]5 H
* d# k" g8 o! ]# L* @( H0 G" q
这组就复杂些了,每一行都分为3部分,应该分别打印。9 T0 C. z) t; _0 n+ d1 N3 T
程序如下:% a( m! s1 C% V5 a6 B" O; V: `0 S

2 |, ], ]6 [# E3 n: g( _8 n2 F/ \5 V: Cvoid fun2(int n)
6 b5 b$ L; A9 P$ a: I% Z. u{
* ^! }4 `0 u! K! p4 M0 T) v    int s,x,y;
2 S" N/ i% ^5 M0 [: C, o+ D" a    for ( y = 0; y<n; y++ )- }) H5 @5 N/ ^
    {# G% K, T& D3 x' ]* E! P6 |# {, X
        for ( s = 0; s < n - y - 1; s ++ )  // 确定开始的'-'有n - y -1个是重点, Y6 }8 _& t  k, z; J/ ]6 N$ N
            cout << '-';% O% @# V( f3 j$ n1 l5 T0 S6 x
        for ( x = 0; x < 2 * y + 1; x++ )
+ U5 g: v" j6 j9 |& d            cout << '*';
% L/ C. K- s/ z& p        for ( s = 0; s < n - y - 1; s ++ )//因为左右对称,直接将上面的搬下来就行
0 Z: Z. |+ U9 e( C: `            cout << '-';, A* D, ~) M- A3 h6 a; I+ G
        cout << endl;
* k$ F( s- j2 g9 H, e7 T( x    }8 ^- `- Y" |9 r2 l- h9 ^
}7 w9 @! |: k- X2 W

1 T" A1 `( |5 _5 Y* h! P4 _3:! X, [# w- k" \0 K% g0 d0 o' i
5 L0 f9 |' f5 T
----*----
2 h! ~! h) s+ E---***---
6 d% A2 q+ j" k' e--*****--
- m: ^* G' v* c( l4 p; O-*******-+ B9 t8 G$ a* A1 B( L
*********2 g! w) E" g* \2 V8 l) s( G
-*******-) H) ]& v1 S1 C8 v
--*****--$ E  q" L! y3 N& O! l( k  [
---***---7 S  K9 s3 x# I; b$ \* t" u" V
----*----( \) m' b' `; r: Y5 F3 J1 @

! r1 D, z7 |& m) b7 ]; X这个图形就较为复杂了,观察发现,上半部分与2相同,下半部分将2中的图倒了过来。所以只要写打印下半部分的图就可以了,这段程序也可以通过对fun2改造来实现9 S& C, v' W1 |8 [8 B5 }6 T- d, o
打印下半部的程序:) t+ F' i- l& o- d( G
void fun3( int n )
, R4 S' a, i/ i9 q{
7 q- `7 Z$ ~/ y+ F, S5 j  ?    int s,x,y;6 E' l9 V0 \4 {7 y9 b, B: ^
    //将循环的过程到了过来,注意开始y = n - 2,而不是n-1,至于为什么,自己试试就知道了$ ^  U7 W2 o5 q/ T2 w
    for ( y = n - 2; y >= 0; y-- )  # C8 h! }' d' \% S# h3 c
    {
$ g4 S0 e1 N0 F1 U% s        //循环体没有改变5 G/ n$ `% M, w- G7 E; k; ^
        for ( s = 0; s < n - y - 1; s ++ )
  v2 {' o1 Y5 ]* c4 X            cout << '-';# u8 M6 |1 `9 @8 F% u
        for ( x = 0; x < 2 * y + 1; x++ )
; K8 R" c: e, m( e            cout << '*';
$ N/ V. j) e( s2 u1 c9 N) f        for ( s = 0; s < n - y - 1; s ++ )
' t& D2 ]; Y* \0 r+ j! u4 d            cout << '-';
2 a$ m! Q; u, Y  \0 b6 s& o8 Y        cout << endl;
, B) S0 c& c; }, J    }( z5 {; `7 f1 r& v, P
}. L, t: s* K! m3 ?- Q2 D

3 |* @+ |2 T4 x( v9 C要打印整个图形:
% ^2 G3 J, d" A, r) v! L
1 j/ q; t/ {0 Q" X) }6 n, |void main()
% m/ `9 U1 Z0 Y. G: n. l{
1 z$ [3 f$ i. j- |9 ]  r% M. |    fun2(5);//绘制上半部分
- o3 S; i" _1 H7 E0 h) f$ P    fun3(5);//绘制下半部分1 M9 \0 D( x7 Z7 A1 F( S" @! [$ G
}
6 f( f2 C( _6 C9 d+ v& U8 v6 @4 H3 H% O2 |. ?3 u( ~% \
, `" r9 @5 f% b& A
这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流.
作者: Mouqx    时间: 2004-6-7 12:46
<> 这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流.
+ r" J+ J0 X% y# C</P><>
</P><>支持</P>




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