欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

1027 打印沙漏

程序员文章站 2022-06-07 18:53:09
...

1027 打印沙漏

#include<bits/stdc++.h>
using namespace std;
int main(void)
{
	int n;
	string sym;
	cin>>n>>sym;
	int i;
	for(i=1;i<=30;i++)
	{
		if(2*i*i-1>n)//第i个沙漏需要的符号数是2*i*i-1; 
			break;
	}
	
	i--;//i是最大能构成第几个沙漏 
	int nBlank;//每行的前驱空格数 
	for(int j=2*i-1;j>=1;j-=2)//输出上半部分 
	{
		nBlank=(2*i-1-j)/2;
		for(int k=1;k<=nBlank;k++)
		{
			cout<<" ";
		}
		for(int k=1;k<=j;k++)
		{
			cout<<sym;
		}
		cout<<endl;
	}
	for(int j=3;j<=2*i-1;j+=2)//输出下半部分,不包含中间一行 
	{
		nBlank=(2*i-1-j)/2;
		for(int k=1;k<=nBlank;k++)
		{
			cout<<" ";
		}
		for(int k=1;k<=j;k++)
		{
			cout<<sym;
		}
		cout<<endl;
	}
	cout<<n-(2*i*i-1)<<endl;
	return 0;
}