- 在线时间
- 0 小时
- 最后登录
- 2004-7-22
- 注册时间
- 2004-5-28
- 听众数
- 1
- 收听数
- 0
- 能力
- 0 分
- 体力
- 124 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 43
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 7
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   40% 该用户从未签到
 |
问题:编程打印下面三组图形:
- q% [# d1 J( B" a i( L1:
( W0 [. c! ^9 Y) V H( j- a9 g! n! W
*
2 J1 x4 v1 {5 u* u0 P$ C6 P8 O**
' f( t. I6 J( R+ Z***
5 ~1 s4 g' w' i6 ?' x. E****9 [7 b* N4 }7 \3 P+ ~
*****5 Y5 g8 p/ f! ^& C
******
3 z" I; X& e. y3 g" B1 G4 m0 b2 T m& n: L5 o
程序如下:- Z! j4 u) j0 }* v! P% i9 g$ u
1 d" N' R3 F1 h' [/ Z
void fun1(int n)0 q( u2 n2 t/ j5 c/ u9 ~4 z
{/ o; J' k# d( J9 |
for ( int y=0; y<=n; y++ )
% P* c, F, @% a5 X( v" r9 J5 T m' i {* b8 B5 Y% Q! t5 R' C/ n7 |8 O8 q
for ( int x=0; x<=y; x++ )//注意此层的终止条件与y有关" E! T3 I9 r+ z5 d$ E0 E
{1 C+ W* D0 [! {
cout << '*';
4 ?% U! l8 Z$ I9 H9 C }
: [) R+ S2 ~% U; e3 z3 n cout << endl;//换行' c1 I a4 E4 i
}' D" y0 a: a7 b
}8 S0 k4 c9 A+ w5 ?# t
3 w, Q% e" z1 j6 S/ k! P2:& l) h& K& [# Y: e2 K1 i- Y
----*----$ _/ b' Z6 c: F$ M! U8 M# ?
---***---
r+ k0 k5 J1 _--*****--
) K$ w7 I' H+ Y u$ d-*******-* n" s9 R: h( N& y, u
*********& v+ {) y, i: T
% x4 @/ {+ K4 h8 y; A; @; }
这组就复杂些了,每一行都分为3部分,应该分别打印。# y9 h8 R5 o, v6 F5 l5 t; k( G! G
程序如下:
/ k* q1 j* i0 }, O& x
( r) P$ a) }# F" C" w# `void fun2(int n)( j2 Z* h% U' X' f# V! E
{
N0 r& V+ o C) R int s,x,y;+ _# x/ C- W' t% L$ X# N
for ( y = 0; y<n; y++ )( a, H0 G3 ?: X p* j& z! M# D' S
{" j8 X2 w! y; A& {, F) K, E6 @- G
for ( s = 0; s < n - y - 1; s ++ ) // 确定开始的'-'有n - y -1个是重点! r; G+ g$ @+ i; ?
cout << '-';4 h# m6 F* u' k1 u5 @
for ( x = 0; x < 2 * y + 1; x++ )% Q' r" f/ l, L/ f
cout << '*';
8 _+ \+ @# k& X for ( s = 0; s < n - y - 1; s ++ )//因为左右对称,直接将上面的搬下来就行
3 `5 I- v' S! C4 S9 G5 B: m2 G cout << '-';
4 ?! l, a* o% Y7 m$ ]- y cout << endl;2 N/ @' b$ ^- }: C. f* w. P
}
0 ?& O( p+ C: [7 O0 U0 e* b}
' O7 s5 o7 p" p: F3 ^: Q* S" i$ H. i: {
3:( E. R/ D3 f! A2 w! W! D3 k' z( U
' |- Z# |6 \5 f9 r0 W% J! X----*----
8 M7 t, h. A: n! a# o# G---***---. m% S4 f, N( H& m, @! `0 ^" @
--*****--) s; K2 w, i- f! ?" n; v0 E
-*******-
( z; A ~, z7 t; c" X*********
' H8 i, y* ?$ M( A( H-*******-( a- Q/ a5 y: l. e9 n4 f/ l
--*****--- p& z" M% g) z. ^: f6 W5 M
---***---0 W+ R. A% |" Y4 \- d# i& `
----*---- P( U6 m7 [2 A* ?3 U
2 A! K, b1 y/ ~ d7 q这个图形就较为复杂了,观察发现,上半部分与2相同,下半部分将2中的图倒了过来。所以只要写打印下半部分的图就可以了,这段程序也可以通过对fun2改造来实现2 N6 X7 C2 E; u1 m1 j- C3 h3 C
打印下半部的程序:
6 P. H$ l' W5 K! D8 ivoid fun3( int n )
# W0 f* |8 t3 K& S* x: } T{
/ l% u. M* h# G2 X! |2 y1 U int s,x,y;
' A0 y @+ H8 I8 ?$ S+ D' J //将循环的过程到了过来,注意开始y = n - 2,而不是n-1,至于为什么,自己试试就知道了$ E2 i- G+ ], t8 j+ _1 y
for ( y = n - 2; y >= 0; y-- ) & E' i' y, I9 A: _& G
{
) h' B* v1 G" E/ r, @9 \! B //循环体没有改变& \" M* N2 d) p8 w; E: L
for ( s = 0; s < n - y - 1; s ++ )9 |1 D6 G& @1 Y5 z) \
cout << '-';7 b3 g" N1 U; M4 ^8 \& r3 K
for ( x = 0; x < 2 * y + 1; x++ )7 y, X+ d2 [ E9 ?- q
cout << '*';1 ^! _+ g Y' x3 ?# p- s
for ( s = 0; s < n - y - 1; s ++ ): z9 w5 _$ v$ U/ H/ a6 c
cout << '-';
6 Q2 n9 f! o0 ?. A& F2 T cout << endl;
7 r) b3 m' ~ y. B }
+ }! g( J5 r |* m/ D% l8 B}
8 D, w' e1 ]0 j( q& }& s
$ r( `0 Y& j- c要打印整个图形:6 L% Y5 d% e( A5 {5 g
3 y( `: F, S E- d9 }void main()
j1 y" y) J' c; ?$ E{9 H$ y! l0 [% ?1 E! n4 d
fun2(5);//绘制上半部分- T% \1 V7 X" ~$ H+ Z0 M2 r
fun3(5);//绘制下半部分
, D \" a9 _: \$ _6 L}
7 a6 ]9 ^8 \& B% h; D7 ^( u
! S9 M+ b+ _9 X( O; y3 Q9 f7 Y
1 }- l% j" s# l5 S这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流. |
zan
|