思路:
有点丢脸,没想到入门时的题目,到了现在竞卡了许久哈哈哈。主要就是用等差数列求和的方式得到完成图案的所需的最大符号数量。再用两个两层for循环控制输出,一层控制行数,另一层控制空格和字符。
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int num;//符号数目
int nownum;
char a;//符号
int n=1;//等差数列数目
int left;
cin >> num >> a;
while (1)
{
nownum = n * n * 2 - 1;//利用等差数列求和得到现在的数目,如果大了,那么-1就是一半图案的行数了
if (nownum > num)
{
break;
}
n++;
}
n--;
nownum = n * n * 2 - 1;//求现在的符号数目
left = num - nownum;
for (int i = n; i >= 1; i--)
{
for (int w = 0; w < n - i; w++)
{
cout << " ";
}
for (int j = 1; j <= 2 * i - 1; j++)
{
cout << a;
}
cout << endl;
}
for (int i = 2; i <= n ; i++)
{
for (int w = 1; w <= (2 * n - 1) / 2 + 1 - i; w++)
{
cout << " ";
}
for (int j = 1; j <= 2 * i - 1; j++)
{
cout << a;
}
cout << endl;
}
cout << left << endl;
system("pause");
return 0;
}