数学建模社区-数学中国
标题:
算法入门系列之一
[打印本页]
作者:
matrix_spaceman
时间:
2004-6-6 13:18
标题:
算法入门系列之一
问题:编程打印下面三组图形:
# n% T' t5 G0 t" e
1:
' 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 T
void 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% O
void 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 W
1 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