- 在线时间
- 0 小时
- 最后登录
- 2004-7-22
- 注册时间
- 2004-5-28
- 听众数
- 1
- 收听数
- 0
- 能力
- 0 分
- 体力
- 124 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 43
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 7
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   40% 该用户从未签到
 |
问题:编程打印下面三组图形:
B# N$ U; t |6 |1 U4 r6 X1:& ]" f+ S; ~7 M0 l: r7 r9 ~
# {4 U6 a! a0 O P*
6 t; B, \: o& m# H( w% S+ A; G**
9 J( }/ O2 g: a5 c) ?***; w5 S& ~5 G2 q0 n
****( x1 l4 u6 V3 h
*****, n3 w/ m! Y1 }/ C3 j4 [$ j
******( e; S) M& j3 z0 R. e0 ?% S! b
, o) ^- j0 i% V- e程序如下:/ i( a% j* j q
1 y1 v: l" P$ H/ V+ [8 c
void fun1(int n)
1 ]3 q/ ]+ Y" I2 W( f- X- ~( e) f{( e* e$ p. r5 F! n0 n3 `% X
for ( int y=0; y<=n; y++ )
" B4 q* v7 { E: {) u) K7 S% ` {0 ]: k- J4 J9 r6 l- F2 H2 h& J- Y, Z
for ( int x=0; x<=y; x++ )//注意此层的终止条件与y有关
9 o( J* s3 f1 N1 X/ f+ P$ T {9 ^. y; o- o- s, u9 T! @. V' _
cout << '*';
1 _# Q* K3 a: H `( w% c1 v }! f. A) X0 ]+ c0 \3 y' c
cout << endl;//换行# z, @4 D7 v* J7 {1 u* U1 E
}: B: [- _: x a$ O4 N. I7 U \: H
}
D5 r, \7 t. h' {
2 @/ K9 v \6 w: k, m2:
: J# {( N4 C) Z, v3 J----*----/ X) ]' C2 A7 E7 F. F
---***---' t: v4 ~2 B* h/ ^8 m, u4 ]
--*****--4 }$ _' }5 \: ]" b
-*******-
! k) Q5 y8 }9 ~+ I*********
1 K% e% b$ A7 p
/ B6 | M7 A. {6 M' ^' u2 [' m这组就复杂些了,每一行都分为3部分,应该分别打印。
0 f' s: F+ C0 Y k/ R程序如下:" o0 _! Z9 |% B+ ~
( U# z6 M# v! {' ]0 E, @3 Uvoid fun2(int n)
3 J6 h* ]- ^" q( V$ s( K{* {/ a% d1 j+ E/ N- U' u: v' t% k7 Z
int s,x,y;
+ J ]& e' z1 `" C" ^; | for ( y = 0; y<n; y++ )# [0 F- Y+ t: V
{
9 O, l& X; |& ?+ ] for ( s = 0; s < n - y - 1; s ++ ) // 确定开始的'-'有n - y -1个是重点
4 Y4 S. L/ s5 t+ U9 T) u( i cout << '-';& c3 V9 `7 z* p7 x o: \7 |
for ( x = 0; x < 2 * y + 1; x++ )
! O5 O+ ]5 N5 T cout << '*';
* D$ W6 t' e) a% v! I for ( s = 0; s < n - y - 1; s ++ )//因为左右对称,直接将上面的搬下来就行
" @0 o! P, a3 u cout << '-';
5 A, h4 _& P2 t$ I6 g cout << endl;
6 X2 R, y- j( d3 Y0 I' Y }
4 G1 [* C6 @. N: w' q}1 ]3 X5 k% V' l0 E& _$ j+ n. ]* G
6 O1 @$ ]! S/ f/ F1 c j3:
+ _- d" v; r1 I9 `* r: u
- |3 k& E& J: J- M9 N----*----# y9 y8 I+ S6 ?6 s5 N& R
---***---
, t: h( y1 \% A! b! V% f--*****--
- I6 x, C/ y# A4 K& U-*******-# g$ n4 g' V: |$ O) d" Y1 l) G9 o% }
*********) S5 h3 a9 n5 ?2 t
-*******-
' P, g- O3 ]6 u$ W8 M3 M--*****--
6 y# F' x( G' C/ `$ O! K; [9 U0 Q---***---& P% d) e/ f! k1 Z
----*----
* C( N! @; Y. F7 m) u0 D: N# H' T) @2 G+ _4 U* a9 c/ ?& H
这个图形就较为复杂了,观察发现,上半部分与2相同,下半部分将2中的图倒了过来。所以只要写打印下半部分的图就可以了,这段程序也可以通过对fun2改造来实现9 V- c+ {! d; p; u; Y: o
打印下半部的程序:) U) ?+ E/ e8 n5 P: _7 t* Y
void fun3( int n ). |: k$ F/ b1 L& A Q
{. }( i% \; H- v3 e' x
int s,x,y;
0 a. p4 L! s' F1 Q, j //将循环的过程到了过来,注意开始y = n - 2,而不是n-1,至于为什么,自己试试就知道了
0 i7 E# \8 G c! w/ l4 W for ( y = n - 2; y >= 0; y-- )
. r6 L4 l% y- n, U9 _ {
- c8 p2 a# ]" d2 P# U //循环体没有改变
8 y" e) a* ]# K2 V7 Q for ( s = 0; s < n - y - 1; s ++ )
1 x y4 m) I* Q/ ]6 b2 `8 Z) e4 M cout << '-';
2 ~! I8 J4 X. h2 F: `1 c8 [ for ( x = 0; x < 2 * y + 1; x++ )
: z8 {. C* q7 ?: A0 d cout << '*';
3 e) `4 |3 B5 k7 f for ( s = 0; s < n - y - 1; s ++ )
) E( _2 T4 V1 b5 T( r; f cout << '-';8 W$ O/ g1 o5 r* [- F+ v; r
cout << endl;3 r8 a8 d! Y' W3 S0 p8 @
}; k) w" e3 H# L. Z
}
2 O, P' F2 c; i6 h5 `0 w. |- b( e
' r* C0 q' a) h( P2 I* r要打印整个图形:
6 S5 c/ C5 F' _* P( N# s, B$ z. A) o
. W" n7 ^8 X% }3 pvoid main()
9 j- G& B$ M/ t4 W) z{; R; Q) `" |2 i# [
fun2(5);//绘制上半部分% H! u/ C* _% k
fun3(5);//绘制下半部分% _ B( L3 a6 n4 Y k1 S1 U
}
2 R b' j3 Y' A+ H
9 a* \! i1 ~0 u0 y$ w
. D0 M$ e. _& a- K( h这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流. |
zan
|