- 在线时间
- 0 小时
- 最后登录
- 2004-7-22
- 注册时间
- 2004-5-28
- 听众数
- 1
- 收听数
- 0
- 能力
- 0 分
- 体力
- 124 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 43
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 7
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   40% 该用户从未签到
 |
问题:编程打印下面三组图形:
$ c m& C" X }( e4 c3 q1:5 ^9 F; `9 v* Y
7 O, i0 [5 N5 l$ R5 }- i
*
$ T' S6 \! R; X! l+ D; L( T0 x**
5 r+ E9 N4 q* M1 I***- N% l( A9 R1 e' V* v0 b$ ~0 l" Z8 n
****
/ Z: y I" x2 N- S8 Y; p: s [ M# [*****% Y: R3 J, c: e% k( o
******
) z, h1 V- f" F V/ l9 |8 p/ S
# C; j# ~: q0 M& i8 o# O3 u! L程序如下:% Y7 t9 x* z6 l7 {
% U8 Y( y+ R' v% N. mvoid fun1(int n)
/ F8 V: F |$ o! ~) _& f{4 Z: d) T! G) F! A& {7 |
for ( int y=0; y<=n; y++ )) O' ^) {8 B4 R: Q1 T- Y
{6 z# `) A# g( K$ T3 A5 G( J
for ( int x=0; x<=y; x++ )//注意此层的终止条件与y有关7 r* ^ |7 p+ ~2 S- M
{
( x: B8 y$ S5 z* P6 R6 D# W) u cout << '*';8 n8 W" Q5 X9 {: H: R/ F( j' s
}7 v( _- \5 P Z8 z
cout << endl;//换行
& g; U Y& D0 c2 T2 E( c& m; s- N+ v }
0 h8 E8 t' c: L}
7 a. D- Q3 Z. `7 ?+ X$ p# x( D: V' q; D& R+ B
2:
% s0 H0 ?- {4 z3 L+ p" C----*----) J: _, o$ i5 I7 i
---***---9 f2 Q2 n n1 C' T2 V6 m' l
--*****--
1 V2 x6 n( a' g) M$ s-*******-
6 j9 M' y# ]1 e. {*********- ^2 a# o, U0 L( B& \3 r8 [& g
3 U& q- V4 B! _! L- P! H; Q这组就复杂些了,每一行都分为3部分,应该分别打印。
6 Z. g% U; [! c& a. M; z程序如下:
9 O, a$ C# C' I0 o4 z7 X& \/ z7 z6 w6 z
void fun2(int n)
( K- f0 g J- l. e& k3 P{
0 |' Z: q! Z/ E& ~: m7 y int s,x,y;" o( C* I$ e9 r' Z! }* A3 W
for ( y = 0; y<n; y++ )2 n, L% S6 Q Q6 N! ~/ \
{9 I9 y- H1 `, K9 n
for ( s = 0; s < n - y - 1; s ++ ) // 确定开始的'-'有n - y -1个是重点9 g; M$ C- a" [5 S4 V5 d
cout << '-';
6 X P! C% i$ y6 O# R. v3 s for ( x = 0; x < 2 * y + 1; x++ )& i5 W7 o+ J) l- P& e
cout << '*';
1 b% K2 |6 X& T2 z, u4 f for ( s = 0; s < n - y - 1; s ++ )//因为左右对称,直接将上面的搬下来就行
. `; r2 u& D, F6 t$ w/ q$ Q cout << '-';
; F" l8 Q* b# _9 J cout << endl;
- [5 b+ K6 h$ e) @ }
4 f$ x$ y2 B+ B5 x}
2 [' P7 d( ^0 B; G+ z9 y* w# i# d
* O. j. x j2 n% B3:8 Y! Y" O3 w7 e+ |4 @4 Q
) Q ~0 B7 t2 Y8 S/ i3 n- g }----*----
. B) f8 ?/ `: [0 A---***---5 [" }0 ]$ R' |0 S2 G% x5 l
--*****--
% v( ^- L* V, b-*******-
z' N% B+ t$ L8 X7 e- c" N*********6 Q0 _, }- d( {5 h7 N- w. i
-*******-6 Y, N- D; W z% s# x5 i
--*****--
# l D% ?3 s% p: W: N7 u3 W---***---+ Z4 c( h( |7 G, s6 x9 y0 j
----*----
F5 ~) ~. V. |& u3 S& [' \( V. B) C' z7 e
这个图形就较为复杂了,观察发现,上半部分与2相同,下半部分将2中的图倒了过来。所以只要写打印下半部分的图就可以了,这段程序也可以通过对fun2改造来实现7 X8 W/ W0 {3 c3 \
打印下半部的程序:& k9 r$ m: D/ Q
void fun3( int n )2 V1 N9 f+ q. f+ b0 N; ^4 `
{
# ~' W% F9 j. Y/ F; m, V5 u int s,x,y;
/ Y0 m8 J7 c! ~3 o/ _ //将循环的过程到了过来,注意开始y = n - 2,而不是n-1,至于为什么,自己试试就知道了
; g9 K3 {. }; @+ i: v for ( y = n - 2; y >= 0; y-- ) b x7 o# Y* w) w
{1 C5 Q2 V# Q, M$ w) W8 A
//循环体没有改变
x X4 r# M5 t a- }. ~ for ( s = 0; s < n - y - 1; s ++ )6 r* P# O# p M' h; g( p
cout << '-';- E% Q6 J& y* l! ]) ?3 R! Q
for ( x = 0; x < 2 * y + 1; x++ )% n2 J7 E6 o) p% V+ G
cout << '*';9 p; r+ q, y' p8 L' m4 O( x
for ( s = 0; s < n - y - 1; s ++ )
7 S( z+ E" } X4 n$ ?* z cout << '-'; }% u/ D0 n' l, g/ c$ y
cout << endl;5 G: T/ X' h. K& w8 [! l$ x" B o2 a
}
3 E2 X1 e, }9 ?; l! m( Y& ]- b}
8 w; Z) l. s8 s' Y: }- z9 J8 y7 h3 \* Y9 ]. B. c
要打印整个图形:
% h- @9 g& M3 o/ U6 U$ `3 c: R, j+ ]$ f' r% m" u7 c
void main()) P7 e/ G7 d* c8 F
{7 v' |7 E2 J1 c8 M0 v! N$ g
fun2(5);//绘制上半部分5 B0 ]. s3 C" L& z( q8 W. A
fun3(5);//绘制下半部分7 S* z# A0 w6 w8 B' `; u4 O
}
/ c6 q6 T, R, k4 S5 {- C9 n* B, [3 }
! R- ~9 K* e' q) b3 D4 B, h0 x$ {4 D7 u/ {
这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流. |
zan
|