数学建模社区-数学中国

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

作者: matrix_spaceman    时间: 2004-6-6 13:18
标题: 算法入门系列之一
问题:编程打印下面三组图形:
; [, k( y( {" i9 X! g& ~2 R1:
7 R) T( j- D& s+ e
4 Q. s/ I& G$ a2 e*
* n* _4 S) D" c, }& x: X6 V**/ D, O& ~, D" ~, ?
***
# o3 ?! l+ v' c' ?****
3 f5 H. }. g& T& l5 r*****0 j2 I# E3 Z7 U1 H! z3 g' {
******* k- g$ ]# a1 w) \5 P
2 i) j6 G  G2 g0 t
程序如下:
: e6 g& \  ^/ F3 y$ x* P* k1 ~& [# r9 m0 E1 i9 X) w% u  G/ e
void fun1(int n)
( v; a  U  o7 E3 U3 L5 I{7 d( D6 {6 H8 A% Q
    for ( int y=0; y<=n; y++ )9 L8 C2 v( e% W; H( G* ]. x
    {9 }" R. B8 W2 f$ {+ n) m
        for ( int x=0; x<=y; x++ )//注意此层的终止条件与y有关
2 P: U( q. Q  W# H9 x) _) v        {( ~4 w% U1 p! ^8 r7 r- T5 |
            cout << '*';
' c+ ]. y6 F; r, _4 e        }0 I4 X  ]! n& D, B
        cout << endl;//换行$ j. E) _- Y3 \: K& _
    }
4 S! p! r: I9 W& M7 [" C- U}
+ }4 j; y1 z: Z" q. ~9 K2 `- U9 @/ ]8 I6 T
2:' A2 Y; _; h4 X- D0 }
----*----
4 d( a) M' W% N$ \1 c7 Y- y, u' @1 p, u---***---
9 j  l  I0 c0 y7 F1 A3 Q--*****--
; F5 X3 d0 j: P( m+ i-*******-; f! R4 g* h2 L6 w' D
*********
) t7 f. [* x$ Q, b
8 l% Z* \+ O& K/ `这组就复杂些了,每一行都分为3部分,应该分别打印。" }9 E( r% b0 z% R; x
程序如下:
4 j  d: J$ S* U8 E$ T1 m0 F  G; I. G+ a; n
void fun2(int n)
8 _; Z3 S2 d& e: ^7 ^{# h* T/ ~# j+ `, l) l. t
    int s,x,y;9 `7 [7 c% v* L( h2 U, j9 E6 U
    for ( y = 0; y<n; y++ )
7 f, d* p4 x- Z" T! I- h    {0 ~( a- H* B9 R9 x8 n
        for ( s = 0; s < n - y - 1; s ++ )  // 确定开始的'-'有n - y -1个是重点2 _/ q3 N& i2 \+ p* @" o  ?6 j
            cout << '-';: H- U/ W, g! d) z
        for ( x = 0; x < 2 * y + 1; x++ )6 o% D  W" n& x, e+ q/ D5 p9 A
            cout << '*';, `3 o1 ?; M8 ~1 k) c" v
        for ( s = 0; s < n - y - 1; s ++ )//因为左右对称,直接将上面的搬下来就行" _  c9 B1 T) v, w- T+ T/ q# y
            cout << '-';
" ]! B1 X& E' ]8 X. p4 a: [4 Z; {        cout << endl;
0 {) v+ o& q4 v+ B8 |$ I8 W1 `    }
  {3 U" \; n' k* A0 N, i6 O}: b6 U2 u  E$ b1 T/ I

7 H1 ]. p1 Y! d4 ]# j+ L3:  l& b( O1 Z& J% ]( N% J- V7 B

5 u- D% o" w! \+ P( H/ K" N1 Z----*----
$ Q" n% h8 G( L' H% N8 X---***---
! a2 y) v: `0 o8 c; o+ G) ^--*****--: |8 {- q, s! J3 l
-*******-  P9 q0 K6 Q: {5 `8 z0 q/ u. a# Y
*********& ~. t$ Q" J8 `/ [! p* k& \9 V7 r
-*******-1 k' I% t7 V2 b3 K' X1 k
--*****--
1 g0 S3 X( v9 K, Z$ c' C---***---; n6 H, i7 s, I/ E  R3 r
----*----0 V/ V" \) {$ ^1 u- |: Y

  C+ _) H' {' f  k! X% g" j! v这个图形就较为复杂了,观察发现,上半部分与2相同,下半部分将2中的图倒了过来。所以只要写打印下半部分的图就可以了,这段程序也可以通过对fun2改造来实现
9 b3 u) J; A- I打印下半部的程序:
6 Q2 z( @: m8 b4 tvoid fun3( int n )
8 n* i6 F* ^. B& M8 d' `{, R" q: k' E% X- L6 s8 W4 J2 O
    int s,x,y;5 G& M5 J$ h* M% h  x6 [
    //将循环的过程到了过来,注意开始y = n - 2,而不是n-1,至于为什么,自己试试就知道了
* }5 N" R7 X+ ^/ x% P+ e3 e    for ( y = n - 2; y >= 0; y-- )  
3 A1 m& k! s1 l) p- o) \: R& C1 h    {6 A* j* V8 E) j. s. h
        //循环体没有改变
% @" ?. Q1 b% J, e+ ^2 C        for ( s = 0; s < n - y - 1; s ++ )
2 Y5 P8 J9 V1 R) A- {            cout << '-';: s% T, U# P5 I( u& \/ p  W
        for ( x = 0; x < 2 * y + 1; x++ )% `% H' A8 c/ D. a! H
            cout << '*';
5 ^% I4 n4 I/ n+ Z        for ( s = 0; s < n - y - 1; s ++ )
2 D+ M5 j3 e+ v3 T            cout << '-';
3 a. r8 J* ^. K- E% b+ _/ M        cout << endl;+ s1 w; V6 l9 Z: S6 V- O# n9 a
    }  U9 h6 \. d* g8 ~
}
; M* A& Y- R" \% h, V9 d0 T
: j! T+ s5 p5 |+ S4 s$ C# W9 M要打印整个图形:
# W) ~3 \; B5 r5 U! F) D% `
8 u: C/ a  a* `  S* ivoid main()1 d+ O3 L: ]: J1 X  x5 S
{
! x2 M% M8 d5 j/ R3 x- n    fun2(5);//绘制上半部分' m; \. G- m8 b1 b' h* G3 m
    fun3(5);//绘制下半部分
- W! A8 F; ~/ X$ u/ ?0 f}
# f- G0 O, X/ k* u- ]; q- @5 o( A8 K2 K# F- I6 a( B4 D3 X% o
$ ^8 ~3 W$ Y! m
这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流.
作者: Mouqx    时间: 2004-6-7 12:46
<> 这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流.
- H" |# p+ j5 ^& S, g# {</P><>
</P><>支持</P>




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