matrix_spaceman 发表于 2004-6-6 13:18

算法入门系列之一

问题:编程打印下面三组图形:
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);//绘制下半部分
}


这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流.

Mouqx 发表于 2004-6-7 12:46

<P> 这些是比较简单的算法程序.我打算开一个算法入门区,为初学者提供服务.大家有问题的话可以一起交流.
</P><P></P><P>支持</P>
页: [1]
查看完整版本: 算法入门系列之一