首先想吐糟一下这个题,我还没有考虑符号数小于七个的情况就ac了
思路很简单
1.它给了一个数,我们组成图形的数目是固定的,而且满足1+3x2+5x2+7x2的规律,那么我们就可以计算出剩下的符号数。(for循环找最大满足组成图形的符号数)
2.根据最大满足条件的符号数,我们就能画出图形。
1.画的时候分三部分来画 上下对称和中间的那一个
2.上下可以确认行数,我们可以用之前的for循环里的i来当做
行数
3.还有一个点就是确认空格数,可以根据for循环里面的值来确认,
例如输出上面的图形时,我们第一步是不需要空格的。具体看代码。
```c
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
char z;
cin>>n>>z;
//考虑小于七个的情况
//大于七个的情况
int i=0,sum=1,flag=0;//flag用来保存满足题意最大的sum
for(i=1;sum<=n;i++)
{
flag=sum;
sum+=(2*i+1)*2;
}
// cout<<n-flag<<endl;//组合完图形之后剩下这么多
//输出图形
for(int j=i-2;j>0;j--)
{
if(i-2-j)
{
for(int m = 0; m < i-2-j; m++)
{
printf(" ");
}
}
for(int k=2*j+1;k>0;k--)
{
cout<<z;
}
cout<<endl;
}
for(int l=0;l<i-2;l++)
{
cout<<" ";
}
cout<<z<<endl;
for(int j=1;j<=i-2;j++)
{
if(i-2-j)
{
for(int m = 0; m < i-2-j; m++)
{
printf(" ");
}
}
for(int k=0;k<2*j+1;k++)
{
cout<<z;
}
cout<<endl;
}
cout<<n-flag;//组合完图形之后剩下这么多
}
PAT乙级1027 打印沙漏
最新推荐文章于 2020-11-05 19:18:59 发布