PAT乙级1027

把输出的图形看成三个部分,假设上部分和下部分分别有t层,则t=3+5+7+9+......,是个等差数列求和,算出来是t^2+2t,乘以2再加上中部分的1个,整理出来总个数就是2*t*t+4*1,用输入的数n减去即可

以输出上部分图形为例,每层先输出空格,以题目给的样例为例,t=2,上部分应该倒着输出,所以第2行有0个空格,第一行有1个空格,第i行有t-i个空格;每行有2*i+1个*,下部分正序输出即可

中部分就是t+1行,由上述规律推出空格数

统计上部分下部分分别的层数时可以从0枚举,根据上面推出的公式算出总共的数目,如果比n大立刻退出,减去一层即为t

#include 
#include 
#include 
#include 
using namespace std;

int main()
{
	int n;
    char c;
    cin>>n>>c;
    int t;//层数
    int sum;
    for(t=0;;t++)
    {
        sum=2*t*t+4*t+1;
        if(sum>n) break;
        else continue;
    }
    t--;//超过了所以减一层
    //cout<0;i--)
    {
    	for(int j=0;j

 

你可能感兴趣的:(模拟)