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 分)的主要内容,如果未能解决你的问题,请参考以下文章

PTA乙级 (1027 打印沙漏 (20分))

PAT-乙级-1027 打印沙漏

PAT乙级考前总结(三)

PAT 1027. 打印沙漏(20)

1027 打印沙漏 (20分)

1027 打印沙漏 (20 分)