我记得自己写的挺简洁的啦,供大家一起探讨学习!
打印类问题常见的就是两重循环,多做就熟悉啦!
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
char ch;
cin >> n >> ch;
int k = 0;
while(2*k*k+4*k+1<=n) k++; //得到的k就是最大semi-行高
k--;
for(int i=k;i>=0;i--){
for(int j=0;j<k-i;j++) cout << ' ';
for(int j=2*i+1;j>0;j--) cout << ch;
cout << endl;
}
for(int i=1;i<=k;i++){
for(int j=k-i;j>0;j--) cout << ' ';
for(int j=2*i+1;j>0;j--) cout << ch;
cout << endl;
}
int flag = n-2*k*k-4*k-1;
cout << flag;
//一开始我以为我的思路有什么问题,但是后来发现就是最后一步,我认为
//没有必要把0输出...对于这题来说是画蛇添足勒,导致测试点2错啦
return 0;
}