C++中的Hackerrank楼梯

Hackerrank Staircase in C++

本文关键字:楼梯 Hackerrank 中的 C++      更新时间:2023-10-16

我正试图使用std::coutsetw以及setfill在C++中解决这个问题

我最初的代码是:

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中有什么东西我遗漏了吗?

您需要打印出一些东西,或者第二个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);
}

打印

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

你所需要做的就是打印出比|更有用的东西,比如#,并修复你的对齐数学。

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

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