- 在线时间
- 0 小时
- 最后登录
- 2004-7-22
- 注册时间
- 2004-5-28
- 听众数
- 1
- 收听数
- 0
- 能力
- 0 分
- 体力
- 124 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 43
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 7
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   40% 该用户从未签到
 |
问题:编程打印下面三组图形:
$ q9 G- f. A. L1:
! g* A1 d8 B9 s, C n8 o$ u
- U- S: R- _7 m0 [9 E% K+ }' b*
! @% p+ s; o8 @# V7 S1 S**& ]6 \& r$ T* M$ e: F! K
***' c, ]/ I% K3 a o; D
***** k* J& G6 @+ c: E3 a
*****
$ D$ e( p( L( @: i****** ^* g; o5 m/ s; M) S
5 J. M& Q" ~4 W0 @2 z. ^$ r% E+ h程序如下:
* r& u* E0 w; `, R( H! b6 ?; z+ \6 ^6 k7 _& s" h% `- U
void fun1(int n)
- i! @2 F5 J7 T5 G4 `- t% B6 x# M/ B{! m* @6 W) S% c' U
for ( int y=0; y<=n; y++ )5 I8 M2 H+ S# U1 a/ M
{
3 x, ^* N: g! s9 j# m; s for ( int x=0; x<=y; x++ )//注意此层的终止条件与y有关. O4 D+ l' p2 c$ x) t3 t
{3 q; \; I4 Q2 V% x8 @/ }4 T5 z
cout << '*';/ U( x/ _3 ~( T8 K# j
}- K/ K' C% g G. @# {1 ~$ p
cout << endl;//换行
$ m. D2 ?3 E* N' M. l$ n1 k }
$ c; P9 D7 x' n}
4 D! Y; l7 c. e$ J; d) j( a4 \. u
i- Q6 \( _( w+ T& |$ V2:
j/ Y. T2 L3 E/ ]6 k----*----
9 f7 ~* F5 ]- Y0 D H" M---***---
: Y5 m- o* p2 N3 Y--*****--. V) F( ?1 A" N6 |" G
-*******-; s( R, s9 x9 `0 A1 V7 y& [( Q7 O
*********, h& A i8 |6 c* y0 f3 V
2 `4 S r/ j7 J7 M. E这组就复杂些了,每一行都分为3部分,应该分别打印。
" ]& O9 {" D6 E @" \0 y8 o. E3 O程序如下:; }0 `0 `9 S0 l5 C3 h3 d
% |4 k/ ]8 S; ~* W3 z5 ~" W
void fun2(int n)
& X& e% w3 O: c+ f4 d! _{
R% m! g* g- b5 G- u int s,x,y;
/ `0 G, w4 H7 f6 r5 U, h0 G8 ] for ( y = 0; y<n; y++ )
) j" B. O2 ]; r. L. H, f4 n {, _! [6 k% C4 N6 p! T
for ( s = 0; s < n - y - 1; s ++ ) // 确定开始的'-'有n - y -1个是重点
8 I- r, i/ w+ ]7 z+ \+ c; U cout << '-';) `4 M, B ^& }
for ( x = 0; x < 2 * y + 1; x++ )4 D+ e, b0 m4 ?% `" ~
cout << '*';
H# P! |3 l% L @+ ` for ( s = 0; s < n - y - 1; s ++ )//因为左右对称,直接将上面的搬下来就行
# [& u8 J+ ]; A7 W6 o( x, c& H | cout << '-';" d; k" ?6 i3 _
cout << endl;9 Z1 v' ^- a( @5 c# p- a
}
" _# L- Y G! M# W% O$ X}
# |$ H6 j+ J4 h9 p( `8 S! x
/ W B( L _. A/ @ d1 o4 i6 c. `3:
+ V1 h7 \' P! \4 o; j6 d, u& c0 N7 C4 y3 g$ ]! L
----*----& P$ Z! G8 g" @: J7 E6 h b
---***---
$ f- @" f: n7 `* d# ~3 [. o--*****--
0 z3 P' z! u- P" a-*******-; Y5 ~# o% u& w- K5 A- O0 Y
*********
|, P7 q: _5 L. P-*******-, K, M1 D& F5 g% }
--*****-- d/ j& J8 v" I' ~
---***---
- {( g( A K. J8 W----*----
* H& F7 g' `; P
1 q% K: W" T* y- C+ o- N2 s这个图形就较为复杂了,观察发现,上半部分与2相同,下半部分将2中的图倒了过来。所以只要写打印下半部分的图就可以了,这段程序也可以通过对fun2改造来实现
/ i! E- t: X7 a/ y- Y9 Z打印下半部的程序:
2 ?" _. n, m% L2 f6 Ivoid fun3( int n )
! B: q6 U% Q' _) M{; h* j0 e+ o0 n' b- t& F
int s,x,y;
# M1 D# k8 x( v) ^ h* @ //将循环的过程到了过来,注意开始y = n - 2,而不是n-1,至于为什么,自己试试就知道了
- s7 s" c+ r2 ~- I$ I0 o for ( y = n - 2; y >= 0; y-- ) / }* r& E9 o; w- r7 P* I- ~2 I
{
3 n u" P* D. s; T //循环体没有改变
4 p2 l$ C* Y2 ^7 s7 m for ( s = 0; s < n - y - 1; s ++ )6 h% @, F3 W# o3 J
cout << '-';
3 U# N$ H; W( _% @ for ( x = 0; x < 2 * y + 1; x++ ); g7 v: n' \; Y4 ~+ W
cout << '*';
+ G6 e1 F2 Q1 z0 h( r E for ( s = 0; s < n - y - 1; s ++ )5 h; S& B. f0 B6 S( b- d
cout << '-';! M, e5 q# g/ `1 W
cout << endl;# U* U% w7 t' u9 v) I+ A, G2 b
}
% ?3 T4 r! ^& a$ ^: u+ I0 R& k}
' R: x! w/ R6 ^& S- k; W
) p- Q' f5 d# F, R7 B- Y3 Q% h& p要打印整个图形:
! _) O. _" I( X# ^+ Q b
8 T- s2 ]5 _9 ]2 t" @2 f, ~- Wvoid main()
5 t% s1 g4 w8 }{
) f0 ]' x6 {: M. {7 E fun2(5);//绘制上半部分
4 D4 K# n! g+ m8 H. b fun3(5);//绘制下半部分
. S K! i2 N9 w- v! ]* K' p}
0 e- f7 j3 g% C. I) u- Y/ j6 t
, Z9 g( T/ M! G) T4 N: [9 c
5 Y% N6 X& J# T5 H1 l& C这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流. |
zan
|