数学建模社区-数学中国

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

作者: matrix_spaceman    时间: 2004-6-6 13:18
标题: 算法入门系列之一
问题:编程打印下面三组图形:4 \; @! Y) w! ^, u: N8 e1 p9 x2 N
1:; n7 W& J) ?1 \. |+ f
; Y  L- a1 R# f, s6 T
*+ f5 r" y/ k! H) X* V2 s
**
9 Y( T; b( D" t2 D4 ]***
( d( }$ ?4 j* ^9 {9 d, `****" W6 ]$ J. }3 s; S/ \& [& A
*****
6 J& J" h+ t6 T******& K( z8 J0 p/ I' [8 j7 k
# Q& ~/ T4 l$ v% E3 w
程序如下:
+ s2 v( b& e( i2 Y2 @  z& l' a# P6 u5 m& c; Y
void fun1(int n)# W0 x8 ?' p: `% J* L
{
* j! ?# N( w% Z/ o- M; k: ]' U& o: {' s    for ( int y=0; y<=n; y++ ), f! S7 ?+ h/ y- k1 z6 B
    {! I. V0 x, A' M7 j, Z' J; u
        for ( int x=0; x<=y; x++ )//注意此层的终止条件与y有关
; Q! y) u2 ~' a) w        {& {; g( }( j4 N) M4 N5 x' z
            cout << '*';8 U7 S5 M3 g7 e) h- R( a" M/ W
        }4 j8 Y0 p6 w* W
        cout << endl;//换行& Y* ~* @* \! H5 ^
    }" N* j8 I+ Z* i- z" y2 [8 p1 m
}& {2 n) O. F" @3 m$ @: ^( m2 U
' S& }' }8 D- c, L; g
2:* \$ Z. L1 v4 V7 `5 X, f  D
----*----
" k) ?0 p, l) R5 b/ Z. M' X/ F$ b6 r---***---
/ T. e+ g4 n  _$ X5 n9 o6 I$ ~: C$ }9 l--*****--
9 A3 ^: E" p* H2 ~9 k" A# e& j-*******-& s% M( ]+ D! d* z  n  J
*********5 W3 e/ `! E4 T

# Q$ I3 j, M; T- m* ]* Q6 Z  L这组就复杂些了,每一行都分为3部分,应该分别打印。
2 m" M2 s* W, S9 B, _, I5 u$ d程序如下:8 r+ r. w$ N5 v% e7 k% Y. }8 O  [' M4 P
  o3 c; J, A; {5 o6 o6 c0 N/ ?: E, f
void fun2(int n)
9 B! F* l% n/ m. ~7 f{
7 H' s; I! h: x: Y, [6 d) I    int s,x,y;" ?; e% k6 Y9 Y/ r: c  I
    for ( y = 0; y<n; y++ )
" }4 {/ A5 p) @; E- u    {
8 p+ ]9 t* R, _) ~        for ( s = 0; s < n - y - 1; s ++ )  // 确定开始的'-'有n - y -1个是重点
  v3 r5 C' ~7 ~* H* c# ]+ x            cout << '-';4 d3 g, n: o" z, q
        for ( x = 0; x < 2 * y + 1; x++ )
4 j* q. X; v2 {0 K0 [            cout << '*';9 @' p0 A. M" c; x
        for ( s = 0; s < n - y - 1; s ++ )//因为左右对称,直接将上面的搬下来就行! C+ E: A( K$ s* P; A: C! Q. G
            cout << '-';1 \$ ~1 H% E# F
        cout << endl;/ J0 `0 Z% q# P2 k: r& [6 i
    }
3 f8 G4 f8 n2 f) k}0 g/ V; }8 e. h; s; a# {

2 }1 D& |6 E: \# r9 e3:/ p9 J) ^9 j7 z" u

/ `! [; R; g+ D4 D8 C$ |2 s! S0 F----*----
1 N0 o1 ]6 I) S( d. m: i# Y---***---! K5 Q- [) q# t% p
--*****--& B, |2 T2 b& s, A# L0 @
-*******-
. |6 k, D- S; t' \*********
3 o( R# S; @2 Y# p3 z-*******-& z! ~+ E( h! o' i- G4 Y* {+ j; z
--*****--+ i" g4 ~1 u' k& w: ~5 `7 V5 R
---***---
7 ?# Z( M  S1 B" X1 d. W7 M----*----$ c) }/ @' O, [" x! W4 |' ~

) N4 T0 V. `+ h3 O这个图形就较为复杂了,观察发现,上半部分与2相同,下半部分将2中的图倒了过来。所以只要写打印下半部分的图就可以了,这段程序也可以通过对fun2改造来实现
# b; U! g2 J! \  Q8 O5 s打印下半部的程序:. b+ _/ P2 a5 ]9 e4 _: f
void fun3( int n )
/ R8 [+ s. y+ W* c, E9 l" p{
+ o: |" x; s  @* e    int s,x,y;) m, V7 H7 j7 ^- X0 C" R
    //将循环的过程到了过来,注意开始y = n - 2,而不是n-1,至于为什么,自己试试就知道了7 M+ _! s. X& V' i
    for ( y = n - 2; y >= 0; y-- )  & _5 W# T* u- {* R: h
    {
* _( h3 U7 S$ P        //循环体没有改变
! ~2 T1 s: L  y3 V9 H        for ( s = 0; s < n - y - 1; s ++ )2 M3 d1 l; k! P
            cout << '-';
7 U; |7 ]9 k6 `+ E8 y        for ( x = 0; x < 2 * y + 1; x++ )) D& t1 Z- n; r' A( s1 Y
            cout << '*';9 E( ]3 R. S  z7 ?
        for ( s = 0; s < n - y - 1; s ++ )
* ^" Q, K( @7 _- E* t4 V: w            cout << '-';
0 a; X% X7 K( J8 c4 j( @# E2 k/ N7 Y        cout << endl;
/ S$ z: E* \! @$ I    }7 l2 P7 ?: r; I
}( q6 S' @% \- ]1 {4 X& a/ }
+ k" f! ^( r4 f0 o  N: w
要打印整个图形:+ G1 E) i/ w. d3 p
# v0 i8 q+ X# c, m; ^: G7 X
void main()
  D0 Q. Q* H8 f{
5 |& G0 T+ o+ h  j' u    fun2(5);//绘制上半部分
  N, `2 U8 K, e+ S  i: D! s    fun3(5);//绘制下半部分3 V4 a: X, }' N, [) f/ ?! o# m
}
) i  J1 ?# U, [2 E, Q) m1 h8 y
' P7 f' h0 F5 P$ l% e6 B. C3 v! b& P
4 {% @, d; y( r( F这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流.
作者: Mouqx    时间: 2004-6-7 12:46
<> 这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流./ {7 U. T/ Z/ j3 [1 J+ U$ f. F
</P><>
</P><>支持</P>




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