这道题的关键就在确定行数,17 = (3 + 5)* 2 + 1,最大奇数即为行数,如果sum * 2 + 1 == n,最大奇数即为行数,如果 > n ,让最大奇数-2,返回上一个奇数, 剩余的字符用n - (sum * 2 + 1),然后就输出部分,下面的代码中有详细的注释,这道题我真没想出来,看了大佬的代码。
#include<iostream>
using namespace std;
int n, sum, sur;
char x;
int main()
{
cin.tie(0);
int line = 1;
cin >> n >> x;
for(int i = 3; ; i += 2)
{
sum += i;
if(sum * 2 + 1 >= n)
{
if(sum * 2 + 1 > n)
{
sum -= i;
i = i - 2;
}
line = i;
sur = n - (sum * 2 + 1);
break;
}
}
int ch = line, space = 0;
for(int i = 1; i <= line; i ++ )
{
for(int j = 1; j <= space; j ++ )
cout << " ";
for(int j = 1; j <= ch; j ++ )
cout << x;
if(i <= (line - 1) / 2 + 1)
{
space ++ ;
ch = ch - 2;
}
else
{
space -- ;
ch = ch + 2;
}
if(ch == -1)
{
space = space - 2;
ch = ch + 4;
}
cout << endl;
}
cout << sur;
return 0;
}