PAT1027打印沙漏

用递推公式推半天的都没搞出来,还是天哥牛皮啊

// 2 * n ^ 2 - 1
#include <bits/stdc++.h>
using namespace std;
int main(){
	int n,i = 1,d = 0;
	int sum = 0;
	int line;
	char y;
	
	cin>>n>>y;
	while(1){
		if(sum > n){
			d = n - (2 *(i - 2)*(i - 2) - 1);
			break;
		}
		sum = 2 * i * i - 1;
		i++;
	}
//	cout<<n<<" "<<sum<<" "<<d<<" ";
	i = i - 2;//column
//	cout<<i;
	for(int c = i; c >= 1; c--){// 3 2 1 three column
		for(int v = 0; v < i - c; v++){
			cout<<" ";
		}
		for(int v = 0; v < 2 * c - 1; v++){
			cout<<y;
		}
		cout<<endl;		
	}
	for(int c = 2; c <= i; c++){//2 3 two
		for(int v = 0; v < i - c; v++){
			cout<<" ";
		}
		for(int v = 0; v < 2 * c - 1;v++){
			cout<<y; 
		}
		cout<<endl;
	}
	cout<<d<<endl;
	return 0;
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值