C ++中的Hackerrank楼梯

时间:2018-08-03 23:20:51

标签: c++

我正在尝试使用std::cout以及setwsetfill来解决C ++中的this问题

我的原始代码是这样的:

void staircase(int n) {
    for(int i = 0; i < n; i++) {
        cout << setfill(' ') << setw(n-(i+1));
        cout << setfill('#') << setw(i+1) << '#'<< endl;
    }
}

这不会打印出右对齐#字符的空格。我将其添加到输出缓冲区cout << setfill(' ') << setw(n-(i+1)) << ' ';中,它打印空格字符,但是对于最后一行,它打印空格字符。

setw中是否缺少我的东西?

2 个答案:

答案 0 :(得分:1)

您需要打印出一些内容,或者第二个setfillsetw替换第一个。例如:

#include <iostream>
#include <string>
#include <iomanip>

using namespace std;

void staircase(int n) {
    for(int i = 0; i < n; i++) {
        cout << setfill(' ') << setw(n-(i+1)) << '|';
        cout << setfill('#') << setw(i+1) << '#'<< endl;
    }
}

int main(void)
{
    staircase(4);
}

打印出

  |#
 |##
|###
|####

您所需要做的就是打印出比|更有用的内容(例如#),并修正对齐数学。

答案 1 :(得分:-1)

这个问题的一个很好的解决方案是使用字符串类的默认构造函数,如下所示:

for (int i = 0; i < n; i++)
{
        int j = i+1;
        string spaces(n-j, ' ');
        string hashes(j, '#');
        cout << spaces + hashes << endl;

}