- 在线时间
- 0 小时
- 最后登录
- 2004-7-22
- 注册时间
- 2004-5-28
- 听众数
- 1
- 收听数
- 0
- 能力
- 0 分
- 体力
- 124 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 43
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 7
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   40% 该用户从未签到
 |
问题:编程打印下面三组图形:
/ C0 I% }: ], N! ]3 K) F- O$ _) S1:; g* _" \$ X; @" j3 N
/ _& g1 ~5 c1 r+ m/ f*
. ]' D, e( k( Y# N7 H' l) A**
: v+ X2 v+ r+ N( h***
2 v4 C* N$ W% o****. _/ W9 R# \( N. n' `$ V
*****
( E8 I2 Y+ b0 W K. Z******) Q) J/ B+ z3 I, n5 h) J; v
; _1 _+ }/ j% d3 e5 n程序如下:
, d W6 W$ g- |( R# y0 ^2 J! L w/ o& n4 {) t2 Q; g3 B
void fun1(int n)! ~/ G& {9 k$ a' O4 q3 @" U
{
$ S# l( ?1 q; `& ~& M for ( int y=0; y<=n; y++ )
. m5 e& A3 k9 y3 ?: l {
$ S$ N% D7 e Z ~7 v, w for ( int x=0; x<=y; x++ )//注意此层的终止条件与y有关
; g% s- `% _5 Y0 p! }) Q. E; x {4 ?6 C! j# G, D4 [! i
cout << '*';
) z0 c& k, y; b# R }
2 e8 r% L, |8 j6 D1 d- x2 q cout << endl;//换行- X5 z! O8 I2 \7 N! W, U5 ?
}! T( d+ ^+ F: H8 Z
}5 B6 I5 L9 @8 Z
7 X. g- g# l2 o, g7 Z
2:: j2 A% M% U; I f$ f* ?
----*----. ^4 h t- k$ @
---***---
w9 w8 f+ a) E$ ?) f) ]7 o--*****--
_ J* p7 R' Y* i8 J* I-*******-
6 z6 z' g& y+ ^" g C*********
: u- z2 i$ n" ^2 P/ A+ `5 ]
/ f8 \( x7 b9 E& \: F$ V4 o# Q这组就复杂些了,每一行都分为3部分,应该分别打印。
" G8 G, {+ z. x程序如下:: J2 W" X4 @( Q2 Q
$ [1 d; w3 @. H
void fun2(int n)5 q; j3 k& `. D, U: r
{
, r0 x! P2 W; n8 O* |* k* _ int s,x,y;
( e9 r/ `$ O5 {1 r6 g for ( y = 0; y<n; y++ )
8 r& @7 B' F7 @ B& n {$ M1 o2 `- g9 A* s. z
for ( s = 0; s < n - y - 1; s ++ ) // 确定开始的'-'有n - y -1个是重点
% R) r w$ ]$ z; {, y' p1 J cout << '-';
2 `0 K) U8 _1 [0 t; L4 b6 Q for ( x = 0; x < 2 * y + 1; x++ )
1 ~& N# U. ~% g8 o* A, s cout << '*';
- X4 a' W" {- n2 B$ N! T for ( s = 0; s < n - y - 1; s ++ )//因为左右对称,直接将上面的搬下来就行
, }+ T; a$ B9 ] c- `4 J- T7 F- d cout << '-';
; E, Y8 M- M6 q/ W K; O' S cout << endl;0 a% r0 w/ H* f% ? O8 t5 S
}
' o! S# a9 n2 J% F+ g1 `}
, S! z. u( D( A) K6 F1 `0 {1 ?$ h& H# Q" B$ W: r
3:
" u }- {3 O6 u1 V& t0 r
* q2 [( ]! ]. n7 K----*----
$ A% l/ N3 a* A$ N" d6 |- ^; E" s* Q---***---
; m- E- O3 F8 h4 ]0 v--*****--
% [/ P x$ } i-*******-
9 d1 f8 e2 ?- k" \6 U3 Y4 l5 M********* b* }! A( z! c' r# Q# e" c( [+ `5 v
-*******-" `; _$ U1 I% S/ R5 D0 P
--*****--/ _, g1 j' J# R4 |
---***---
! r- `2 w' q. F+ D----*----
7 X! \' ?1 r! D5 K" V0 D6 ~% P. k! l; v; i7 a+ w
这个图形就较为复杂了,观察发现,上半部分与2相同,下半部分将2中的图倒了过来。所以只要写打印下半部分的图就可以了,这段程序也可以通过对fun2改造来实现
/ t3 \1 K6 ~# I' x) C$ s) r- G打印下半部的程序:9 |7 F% R" }8 o$ q8 ~( |1 N/ q
void fun3( int n )6 g9 C3 W3 u/ q/ j* u
{' [( g( \- z' w- E, S' T$ e
int s,x,y;, w7 z, ^3 Z3 T3 Z% {
//将循环的过程到了过来,注意开始y = n - 2,而不是n-1,至于为什么,自己试试就知道了
! U( o: E6 y& a* ^) L for ( y = n - 2; y >= 0; y-- ) 7 c8 r1 @2 w, V3 [3 `' p
{
, q# \9 H* U+ c/ @7 p //循环体没有改变
/ M7 e9 `0 a* S. g6 v* v4 S1 v* { for ( s = 0; s < n - y - 1; s ++ )' F b" ^5 R7 U0 E, } E" E+ s7 ~
cout << '-';8 h; Y2 H* y8 n: C
for ( x = 0; x < 2 * y + 1; x++ )1 M: r% ^: a f! C& `- X
cout << '*';
6 i1 R! t. a7 |" v/ H for ( s = 0; s < n - y - 1; s ++ ). W6 X' D [, N* k
cout << '-';5 j- h& F5 z( z9 P
cout << endl;
, e& R& ]6 n! ^6 r. Y }
0 A" x* A8 |2 c9 i4 @}
, t p7 l. j0 E2 H( T% ^, Q' V/ X& H3 ?: ~+ J
要打印整个图形:
. v4 v" h/ O8 z/ W
+ r' P6 i6 Y+ [3 M9 a, ?, }void main()
' ~3 U4 H) i$ i; q* u& _8 o{5 m/ l' |) n L0 T9 q$ P& T
fun2(5);//绘制上半部分7 |8 H) D& W/ l) z7 V) ?) Y5 S
fun3(5);//绘制下半部分. |( Q5 K# W' n& R; {- x
}
6 X1 ^9 C' s' G- E! Z- T: [1 t6 M0 w6 i5 E! P$ b1 }
+ e7 C2 p' ^5 d3 }这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流. |
zan
|