数学建模社区-数学中国

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

作者: matrix_spaceman    时间: 2004-6-6 13:18
标题: 算法入门系列之一
问题:编程打印下面三组图形:
# n% T' t5 G0 t" e1:' a! ~! Q( B/ m9 o3 |

. W$ r! x; f+ }) D& ]*" i% H# \& }$ v
**7 H6 s# o( [3 E1 h; k- h
***% E  J& U2 K5 X) O3 n( g
****0 o" {+ W, n! a/ {0 ]& U  Q0 P
*****( o. U$ {+ m. \1 s
******
. b# X; ]( R1 N+ P
' x4 b% o4 E3 N& U7 D7 R程序如下:) p9 X# Z: _1 C7 G; P1 z8 A
6 A9 q5 ]; x3 T4 E* \% j+ y! n; Q$ n# J
void fun1(int n)
# l$ E% G# T! j7 {{( ]2 T" m$ N5 i) [6 \
    for ( int y=0; y<=n; y++ )
' F/ h( v8 o+ _2 @8 k    {
/ g7 H7 b+ N0 u- a8 A5 O9 V  K& N        for ( int x=0; x<=y; x++ )//注意此层的终止条件与y有关
3 [) h" Q; @# W# z) }* C        {
; u: o( O* Q& N6 v# k1 K            cout << '*';
. T7 r  A7 Q7 v  s! G, Q        }
4 z6 G& f: V- n- }1 k& ^7 }3 m+ g        cout << endl;//换行
/ s9 @& h" a3 d* s) s# l    }& b1 P, {% F: e& w) e3 r
}7 ?+ I" n) u) c( S" t8 ?8 `5 ^
5 J7 A3 K4 z) S7 V) l
2:
( q9 x' Q8 k" z; S; p----*----7 e( Z& g  W& A1 p: ]% w* e  f- D5 w; l# t
---***---7 J* ^" v) G* p! B- ^) a
--*****--7 b+ y+ o8 j+ a9 k' E1 ~% O; |
-*******-
: y! T3 G( H7 ?2 I*********$ O* S8 M) Y# l  v; @

3 Y% b& W) L( M, Z- t2 g这组就复杂些了,每一行都分为3部分,应该分别打印。" @! _+ W1 r# t
程序如下:
* Y. h4 U& E/ d0 A* Q/ T
7 b. Q8 _. _4 v( c* }: B6 Tvoid fun2(int n), R; H2 M. I4 S
{3 E2 H0 R8 _. }. O3 @) D
    int s,x,y;
* i9 r. I' q# a( _9 W- @    for ( y = 0; y<n; y++ ): s5 D  R3 Q" K" ^3 h7 `7 O, N3 `8 R
    {7 W, w. Z3 \: a+ A4 ?
        for ( s = 0; s < n - y - 1; s ++ )  // 确定开始的'-'有n - y -1个是重点
* Z0 n) Q/ w5 Z& c' g            cout << '-';4 X& _! X# F1 v
        for ( x = 0; x < 2 * y + 1; x++ )
$ G& D* D% g. _! i1 _            cout << '*';, z/ L) G* }3 G' \$ x2 W) C
        for ( s = 0; s < n - y - 1; s ++ )//因为左右对称,直接将上面的搬下来就行) Q( z% p0 _+ B8 ^+ i; p2 C; h% \
            cout << '-';
( p" V% l5 E% l        cout << endl;. N7 U2 d1 e" L8 ~* w* J
    }
  Y" |/ W5 I) Y: Z8 C2 k}) b5 M$ P( W3 r4 `% F8 K
- J  C3 j  }! R. e: u
3:
6 Y0 s# K- A! O0 `
( v" \% `6 [7 [) Z----*----! s! v/ D& I' U1 t
---***---
. n% [) K; O2 u  |. C) k* V--*****--2 ~4 X2 d: s4 Z; {. J
-*******-
- O. N, o! J/ ]3 J. a$ W: S*********$ a  Z" {& A7 h8 p2 W
-*******-9 {) T5 F. k* D' a. I- f
--*****--
2 v0 L! n; i8 g# x, i. Z---***---
) \9 t1 u# V! l% {" W% O----*----/ b8 b) _. ]& T: k# H
6 B; v) P: I' i1 l# m3 Z& a
这个图形就较为复杂了,观察发现,上半部分与2相同,下半部分将2中的图倒了过来。所以只要写打印下半部分的图就可以了,这段程序也可以通过对fun2改造来实现: b8 g) n3 U' u0 X4 L* ]% R$ G6 c
打印下半部的程序:
% [5 u3 ^3 b( T* o% A- H3 b% Ovoid fun3( int n )
# C/ i  |% Z9 Z* E3 A{6 a6 U( Q' }2 R! ]
    int s,x,y;
* j6 r, T+ S# `2 p+ B, V    //将循环的过程到了过来,注意开始y = n - 2,而不是n-1,至于为什么,自己试试就知道了
  `. S. f" W6 E" Y5 g  ~) F- r* K5 H    for ( y = n - 2; y >= 0; y-- )  
- O0 p& v" D. S7 R    {; }7 |4 n( x+ Z
        //循环体没有改变
) Z2 m0 ]5 s* B/ X5 Y4 ?4 u        for ( s = 0; s < n - y - 1; s ++ ): K2 @! Y$ `9 i
            cout << '-';
* z, s  r- M. q, N$ P        for ( x = 0; x < 2 * y + 1; x++ )
! x9 Z5 U' C3 R) t% ]4 R1 k            cout << '*';
  e! D' d& C+ E# x; F; j1 S% `- F        for ( s = 0; s < n - y - 1; s ++ )  P3 B" M# K! W. Y* l& T
            cout << '-';
' s0 N& P: S) ^6 d( j. @        cout << endl;
- [( n  U2 Q0 D3 t: P7 g8 _    }( {: O& }1 q& @8 U: O1 \# F
}
2 D( k% ]5 T# T  p1 e  a$ U
' Z& g4 u. O: h$ W要打印整个图形:
% k8 n, S& n  p$ Q2 t5 M- m6 X2 W9 W1 l' I5 u: e: e! s9 \8 t$ r
void main()& ^/ y* ^% O% U) |8 ?" j3 N5 F
{5 s  f) i! Y, x) r8 C9 w
    fun2(5);//绘制上半部分
+ e& D: k# x( M3 o9 J0 \. z    fun3(5);//绘制下半部分; ^- G: B* |( b- }  y
}7 t# `+ z6 }1 ?' y+ b
8 n: n! q0 U( P6 k- P! r8 s- i8 T% ]
2 R2 y: f7 H0 P- d. D; t9 p
这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流.
作者: Mouqx    时间: 2004-6-7 12:46
<> 这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流.
' p* X! I4 T" @% z# m- u2 \2 ~) W</P><>
</P><>支持</P>




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