如何绘制相反的反三角形?

时间:2016-07-20 19:42:11

标签: c++ for-loop

我今天正在玩一些代码(我是初学者)。我刚写了一个简单的程序来制作一个三角形,其中基数由用户的输入决定。

以下是代码:

#include "main.h"
using namespace std;

int main()
{
    int triBase = 0;

    cout << "Enter a base number for the triangle [1-100]: ";
    cin >> triBase;
    cout << endl;
    while(!cin || triBase > 100 || triBase <= 0)
    {   
        system ("clear");
        cout << "Invalid input!" << endl;
        cin.clear();
        cin.ignore(10, '\n');
        cout << "Enter a base number for the triangle [1-100]: ";
        cin >> triBase;
        cout << endl;
    }   

    system ("clear");
    for(int lines = 0; lines < triBase; lines++)
    {   
        for(int rows = 0; rows <= lines; rows++)
        {   
            cout << "* ";
        }   
    cout << endl;
    }   


    return 0;   
}

我的问题是,如何让三角形以相反的顺序出现在屏幕的另一侧?例如,用户输入5,屏幕显示:

*                                                            *****
**                                                            ****
***                                                            ***
****                                                            **
*****                                                            *

或者如果他们输入12:

*                                                       ************
**                                                       ***********
***                                                       **********
****                                                       *********
*****                                                       ********
******                                                       *******
*******                                                       ******
********                                                       *****
*********                                                       ****
**********                                                       ***
***********                                                       **                
************                                                       *

有没有办法知道角色可以如何适应屏幕,减去适合该行的字符数,然后在空格中添加差异,以便它们在正确的位置开始,以便每行在屏幕的最后一个位置结束?提前谢谢。

2 个答案:

答案 0 :(得分:3)

这应该有效:

   for (int lines = 0; lines < triBase; lines++)
    {
        for (int rows = 0; rows <= lines; rows++)
        {
            cout << "* ";
        }

        cout << std::string(30, ' '); // 30 spaces

        for(int i = 0; i < triBase - lines; i++)
        {
            cout << "* ";
        }

        cout << endl;
    }

如您所见,在每一行上,一旦完成绘制*,我就会添加一个const数量的空格并执行一个新的for循环以将*显示为{{{ 1}}次。

此外,最好将其视为包含行和列的2D表格,因此triBase - lines实际上是行,而lines实际上是列。

答案 1 :(得分:1)

我能够让它发挥作用。这是最终的代码:

#include "main.h"
using namespace std;

int main()
{
    int triBase = 0;
    string spaces(30, ' '); 

    cout << "Enter a base number for the triangle [1-100]: ";
    cin >> triBase;
    cout << endl;
    while(!cin || triBase > 100 || triBase <= 0)
    {   
        system ("clear");
        cout << "Invalid input!" << endl;
        cin.clear();
        cin.ignore(10, '\n');
        cout << "Enter a base number for the triangle [1-100]: ";
        cin >> triBase;
        cout << endl;
    }   

    system ("clear");
    for(int lines = 0; lines < triBase; lines++)
    {   
        for(int rows = 0; rows <= lines; rows++)
        {   
            cout << "* ";
        }   
        cout << spaces;
        for(int secondRow = 0; secondRow < triBase - lines; secondRow++)
        {   
            cout << "* ";
        }   
        cout << endl;
    }   

    return 0;   
}