1

我必须在带有循环的 C++ 中使用星号 * 制作一个 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 循环期间动态增加它们?

4

2 回答 2

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;
}

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

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

我希望这能解释。

于 2013-11-01T00:43:22.280 回答
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" : "**");
    }
}
于 2013-11-01T01:12:39.890 回答