PAT乙级1027 打印沙漏 (20 分)
Posted 辉小歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT乙级1027 打印沙漏 (20 分)相关的知识,希望对你有一定的参考价值。
#include<cstdio>
#include<iostream>
using namespace std;
int main(void)
{
int n; char c; cin>>n>>c;
int sum,s;//sum统计需要的字符个数,s表示上半部分有几行
for(int i=1;i<=100;i++)
{
sum=2*i*i-1;
if(sum>=n)
{
if(sum==n) s=i;
else s=i-1,sum=2*(i-1)*(i-1)-1;
break;
}
}
for(int i=1;i<=s;i++)
{
for(int j=1;j<=i-1;j++) cout<<" ";//输出空格
for(int j=1;j<=(s-i)*2+1;j++) cout<<c;//输出字符
cout<<endl;
}
for(int i=1;i<s;i++)
{
for(int j=1;j<s-i;j++) cout<<" ";//输出空格
for(int j=1;j<=2*i+1;j++) cout<<c;//输出字符
cout<<endl;
}
cout<<n-sum<<endl;
return 0;
}
#include<cstdio>
#include<iostream>
using namespace std;
int main(void)
{
int sum;
char c;
cin>>sum>>c;
int temp=0;
int n=0;
for(int i=1;i<=200;i++)
{
int t=1+(i-1)*2;
if(i!=1) t=t*2;
temp+=t;
if(temp==sum)
{
n=i;
sum=0;
break;
}
if(temp>sum)
{
n=i-1;
sum=sum-temp+t;
break;
}
}
for(int i=n;i>=1;i--)
{
for(int j=n-i;j>=1;j--) cout<<" ";
for(int j=1;j<=1+(i-1)*2;j++) cout<<c;
cout<<endl;
}
for(int i=2;i<=n;i++)
{
for(int j=1;j<=n-i;j++) cout<<" ";
for(int j=1+(i-1)*2;j>=1;j--) cout<<c;
cout<<endl;
}
cout<<sum<<endl;
}
以上是关于PAT乙级1027 打印沙漏 (20 分)的主要内容,如果未能解决你的问题,请参考以下文章