在C ++中使用*输出V.

时间:2013-11-01 00:34:51

标签: c++ for-loop

我必须使用带有循环的C ++中的astrisk *制作一个V ..

实施例: http://i.imgur.com/4QxnsKz.png

任何人都知道它是如何完成的?

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    for(int i = 10; i <= 20; i++){
        cout << setw(i);
        cout << "***" << endl;
    }
    for(int i = 30; i >= 20; i--){
        cout << setw(i);
        cout << "***" << endl;
    }
    return 0;
}

我认为我的主要麻烦在于如何制作空间?如何在for循环期间动态增加它们?

2 个答案:

答案 0 :(得分:1)

for (int i=0;i<10;i++) {
    for (int j=0; j<i*2; j++)
        cout << " ";
    cout << "***";

    for (int j=0; j<2+(10-1-i)*4; j++)
        cout << " ";

    cout << "***" << endl;
}

从第1行到最后一行的星号之前的空格是:0,2,4,6 ...... 那是lineNumber * 2 = i * 2次。

我们有十行。从最后到第一个星星之间的空间是:2,6,10,14 ...... 那是2作为常数+(totalNumberofLines-1-currentline)* 4。 2是空格的起始数。 4是范围。 -1这里因为最后一行是9和10-9 = 1。取决于循环计数器的起点。

我希望这可以解释。

答案 1 :(得分:1)

不是最好的,但我尝试:

int main()
{
    for (int i = 0, s = 17, w = 4; i < 10; ++i, s -= 2, ++w)
    {
        std::string space;
        if (s >= 0)
            space.assign(s, ' ');
        else
            space = "";
        std::cout << std::right
                  << std::setw(w)
                  << "***" << space << ((i != 9) ?  "***\n" : "**");
    }
}