对应代码和图找规律
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n; string op;
cin >> n;
cin >> op;
int f = (int)sqrt((n+1)/2);//层数,公式自推
int ans = f*f*2 - 1;//实际的字符数
//输出上一层
for (int i = f; i >= 1; i -- )
{
int x = (i-1)*2 + 1;//该层的字符数
int y = f - i;//该层空格
for (int j = 1; j <= y; j ++ ) cout <<" ";
for (int j = 1; j <= x; j ++ ) cout <<op[0];
cout << endl;
}
//输出下一层
for(int i = 2; i <= f; i ++ )
{
int x = (i-1)*2 + 1;
int y = f - i;
for (int j = 1; j <= y; j ++ ) cout <<" ";
for (int j = 1; j <= x; j ++ ) cout <<op[0];
cout << endl;
}
if(ans!=n) ans = n - ans;
else ans = 0;
cout << ans << endl;
return 0;
}