算法入门系列之一
问题:编程打印下面三组图形:1:
*
**
***
****
*****
******
程序如下:
void fun1(int n)
{
for ( int y=0; y<=n; y++ )
{
for ( int x=0; x<=y; x++ )//注意此层的终止条件与y有关
{
cout << '*';
}
cout << endl;//换行
}
}
2:
----*----
---***---
--*****--
-*******-
*********
这组就复杂些了,每一行都分为3部分,应该分别打印。
程序如下:
void fun2(int n)
{
int s,x,y;
for ( y = 0; y<n; y++ )
{
for ( s = 0; s < n - y - 1; s ++ ) // 确定开始的'-'有n - y -1个是重点
cout << '-';
for ( x = 0; x < 2 * y + 1; x++ )
cout << '*';
for ( s = 0; s < n - y - 1; s ++ )//因为左右对称,直接将上面的搬下来就行
cout << '-';
cout << endl;
}
}
3:
----*----
---***---
--*****--
-*******-
*********
-*******-
--*****--
---***---
----*----
这个图形就较为复杂了,观察发现,上半部分与2相同,下半部分将2中的图倒了过来。所以只要写打印下半部分的图就可以了,这段程序也可以通过对fun2改造来实现
打印下半部的程序:
void fun3( int n )
{
int s,x,y;
//将循环的过程到了过来,注意开始y = n - 2,而不是n-1,至于为什么,自己试试就知道了
for ( y = n - 2; y >= 0; y-- )
{
//循环体没有改变
for ( s = 0; s < n - y - 1; s ++ )
cout << '-';
for ( x = 0; x < 2 * y + 1; x++ )
cout << '*';
for ( s = 0; s < n - y - 1; s ++ )
cout << '-';
cout << endl;
}
}
要打印整个图形:
void main()
{
fun2(5);//绘制上半部分
fun3(5);//绘制下半部分
}
这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流. <P> 这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流.
</P><P></P><P>支持</P>
页:
[1]