说一下 这道题的坑点!! 比如 样例 第二行 只有前面有空格 后面是没有空格的 ,我第一次 报格式错误就是 因为后面也加了空格 。
后面部分是没有空格的
另外: 如果 判断 一共输出 用了 字符的话 可以这样
比如 : 5 3 1 3 5
看成是两个 1 3 5 相加 然后 减去1 即可 。1 3 5 是等差的一列数 这样求和就很容易了
代码 实现:
#include <iostream>
using namespace std;
int main() {
int N;
char c;
cin >> N >> c;
int row = 0; // 一边 最多打印多少行
for (int i = 1; i<= N; i++) {
if ((2*i*i-1)>N) {
row = i - 2; // 除去 单独输出一个字符的那一行
break;
}
}
for (int i = row; i >= 1; i--) {
for (int k = row - i; k >= 1; k--) // 每一行 应该打印的 空格数 ;
cout << " ";
for (int j = i * 2 + 1; j >= 1; j--) // 每一行 应该打印的 字符数 ;
cout << c;
cout << endl;
}
for (int i = 0; i < row; i++)
cout << " "; // 上半部分 有多少行 就打 多少空格
cout << c << endl;
for (int i = 1; i <= row; i++) {
for (int k = row - i; k >= 1; k--)
cout << " ";
for (int j = i * 2 + 1; j >= 1; j--)
cout << c;
cout << endl;
}
cout << (N - (2 * (row +1)* (row+1) -1)); // 要多加一行 进行计算;
return 0;
}