for循环的使用吧
我是将其分成上下两个部分做的
有点挑战性(有点繁琐)但又不会很难硬着头皮写下去就好
int num;
char ch;
cin >> num >> ch;
int base = 1;
int max = 1;
int row = 0;
int n = 1;
if (num == 0)
{
cout << num - 1;
}
else {
while (num >= base) {
max += 2;
base = base + max * 2;
row++;
}
max -= 2;
for (int i = 0; i < row; i++)
{
for (int j = 0;j < max;j++) {
num--;
if (num < 0)break;
else cout << ch;
}
cout << endl;
if (n != row)
for (int z = 0;z < n;z++) {
cout << " ";
}
n++;
max -= 2;
}
int max2 = 3;
int n2 = row - 2;
for (int i = 0;i < row - 1;i = i + 1) {
for (int z = 0; z < n2; z++)
{
cout << " ";
}
n2--;
for (int j = 0; j < max2; j++)
{
num--;
if (num < 0)break;
else cout << ch;
}
max2 += 2;
cout << endl;
}
cout << num;
base 是中间那单独的1个字符
定义了一个max2=3是因为从下半部分开始从3个字符开始依次递增打印
要注意的是在我的代码中第二行是比第一行少1行的因为我把中间单独一个字符划到了上半部分
n2=row-2是下半部分打印空格需要的