数学建模社区-数学中国
标题:
算法入门系列之一
[打印本页]
作者:
matrix_spaceman
时间:
2004-6-6 13:18
标题:
算法入门系列之一
问题:编程打印下面三组图形:
; [, k( y( {" i9 X! g& ~2 R
1:
7 R) T( j- D& s+ e
4 Q. s/ I& G$ a2 e
*
* n* _4 S) D" c, }& x: X6 V
**
/ D, O& ~, D" ~, ?
***
# o3 ?! l+ v' c' ?
****
3 f5 H. }. g& T& l5 r
*****
0 j2 I# E3 Z7 U1 H! z3 g' {
******
* k- g$ ]# a1 w) \5 P
2 i) j6 G G2 g0 t
程序如下:
: e6 g& \ ^/ F3 y$ x* P* k
1 ~& [# r9 m0 E1 i9 X) w% u G/ e
void fun1(int n)
( v; a U o7 E3 U3 L5 I
{
7 d( D6 {6 H8 A% Q
for ( int y=0; y<=n; y++ )
9 L8 C2 v( e% W; H( G* ]. x
{
9 }" R. B8 W2 f$ {+ n) m
for ( int x=0; x<=y; x++ )//注意此层的终止条件与y有关
2 P: U( q. Q W# H9 x) _) v
{
( ~4 w% U1 p! ^8 r7 r- T5 |
cout << '*';
' c+ ]. y6 F; r, _4 e
}
0 I4 X ]! n& D, B
cout << endl;//换行
$ j. E) _- Y3 \: K& _
}
4 S! p! r: I9 W& M7 [" C- U
}
+ }4 j; y1 z: Z" q. ~
9 K2 `- U9 @/ ]8 I6 T
2:
' A2 Y; _; h4 X- D0 }
----*----
4 d( a) M' W% N$ \1 c7 Y- y, u' @1 p, u
---***---
9 j l I0 c0 y7 F1 A3 Q
--*****--
; F5 X3 d0 j: P( m+ i
-*******-
; f! R4 g* h2 L6 w' D
*********
) t7 f. [* x$ Q, b
8 l% Z* \+ O& K/ `
这组就复杂些了,每一行都分为3部分,应该分别打印。
" }9 E( r% b0 z% R; x
程序如下:
4 j d: J$ S* U8 E$ T1 m
0 F G; I. G+ a; n
void fun2(int n)
8 _; Z3 S2 d& e: ^7 ^
{
# h* T/ ~# j+ `, l) l. t
int s,x,y;
9 `7 [7 c% v* L( h2 U, j9 E6 U
for ( y = 0; y<n; y++ )
7 f, d* p4 x- Z" T! I- h
{
0 ~( a- H* B9 R9 x8 n
for ( s = 0; s < n - y - 1; s ++ ) // 确定开始的'-'有n - y -1个是重点
2 _/ q3 N& i2 \+ p* @" o ?6 j
cout << '-';
: H- U/ W, g! d) z
for ( x = 0; x < 2 * y + 1; x++ )
6 o% D W" n& x, e+ q/ D5 p9 A
cout << '*';
, `3 o1 ?; M8 ~1 k) c" v
for ( s = 0; s < n - y - 1; s ++ )//因为左右对称,直接将上面的搬下来就行
" _ c9 B1 T) v, w- T+ T/ q# y
cout << '-';
" ]! B1 X& E' ]8 X. p4 a: [4 Z; {
cout << endl;
0 {) v+ o& q4 v+ B8 |$ I8 W1 `
}
{3 U" \; n' k* A0 N, i6 O
}
: b6 U2 u E$ b1 T/ I
7 H1 ]. p1 Y! d4 ]# j+ L
3:
l& b( O1 Z& J% ]( N% J- V7 B
5 u- D% o" w! \+ P( H/ K" N1 Z
----*----
$ Q" n% h8 G( L' H% N8 X
---***---
! a2 y) v: `0 o8 c; o+ G) ^
--*****--
: |8 {- q, s! J3 l
-*******-
P9 q0 K6 Q: {5 `8 z0 q/ u. a# Y
*********
& ~. t$ Q" J8 `/ [! p* k& \9 V7 r
-*******-
1 k' I% t7 V2 b3 K' X1 k
--*****--
1 g0 S3 X( v9 K, Z$ c' C
---***---
; n6 H, i7 s, I/ E R3 r
----*----
0 V/ V" \) {$ ^1 u- |: Y
C+ _) H' {' f k! X% g" j! v
这个图形就较为复杂了,观察发现,上半部分与2相同,下半部分将2中的图倒了过来。所以只要写打印下半部分的图就可以了,这段程序也可以通过对fun2改造来实现
9 b3 u) J; A- I
打印下半部的程序:
6 Q2 z( @: m8 b4 t
void fun3( int n )
8 n* i6 F* ^. B& M8 d' `
{
, R" q: k' E% X- L6 s8 W4 J2 O
int s,x,y;
5 G& M5 J$ h* M% h x6 [
//将循环的过程到了过来,注意开始y = n - 2,而不是n-1,至于为什么,自己试试就知道了
* }5 N" R7 X+ ^/ x% P+ e3 e
for ( y = n - 2; y >= 0; y-- )
3 A1 m& k! s1 l) p- o) \: R& C1 h
{
6 A* j* V8 E) j. s. h
//循环体没有改变
% @" ?. Q1 b% J, e+ ^2 C
for ( s = 0; s < n - y - 1; s ++ )
2 Y5 P8 J9 V1 R) A- {
cout << '-';
: s% T, U# P5 I( u& \/ p W
for ( x = 0; x < 2 * y + 1; x++ )
% `% H' A8 c/ D. a! H
cout << '*';
5 ^% I4 n4 I/ n+ Z
for ( s = 0; s < n - y - 1; s ++ )
2 D+ M5 j3 e+ v3 T
cout << '-';
3 a. r8 J* ^. K- E% b+ _/ M
cout << endl;
+ s1 w; V6 l9 Z: S6 V- O# n9 a
}
U9 h6 \. d* g8 ~
}
; M* A& Y- R" \% h, V9 d0 T
: j! T+ s5 p5 |+ S4 s$ C# W9 M
要打印整个图形:
# W) ~3 \; B5 r5 U! F) D% `
8 u: C/ a a* ` S* i
void main()
1 d+ O3 L: ]: J1 X x5 S
{
! x2 M% M8 d5 j/ R3 x- n
fun2(5);//绘制上半部分
' m; \. G- m8 b1 b' h* G3 m
fun3(5);//绘制下半部分
- W! A8 F; ~/ X$ u/ ?0 f
}
# f- G0 O, X/ k* u- ]; q- @5 o
( A8 K2 K# F- I6 a( B4 D3 X% o
$ ^8 ~3 W$ Y! m
这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流.
作者:
Mouqx
时间:
2004-6-7 12:46
<
> 这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流.
- H" |# p+ j5 ^& S, g# {
</P><
>
</P><
>支持</P>
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5