首页 > ACM题库 > HDU-杭电 > hdu 2091 空心三角形-计算几何-[解题报告]C++
2013
12-29

hdu 2091 空心三角形-计算几何-[解题报告]C++

空心三角形

问题描述 :

把一个字符三角形掏空,就能节省材料成本,减轻重量,但关键是为了追求另一种视觉效果。在设计的过程中,需要给出各种花纹的材料和大小尺寸的三角形样板,通过电脑临时做出来,以便看看效果。

输入:

每行包含一个字符和一个整数n(0<n<41),不同的字符表示不同的花纹,整数n表示等腰三角形的高。显然其底边长为2n-1。[email protected],则表示所做出来的样板三角形已经够了。

输出:

每行包含一个字符和一个整数n(0<n<41),不同的字符表示不同的花纹,整数n表示等腰三角形的高。显然其底边长为2n-1。[email protected],则表示所做出来的样板三角形已经够了。

样例输入:

X 2
A 7
@

样例输出:

 X
XXX
 
      A
     A A
    A   A
   A     A
  A       A
 A         A
AAAAAAAAAAAAA

http://acm.hdu.edu.cn/showproblem.php?pid=2091

格式输出还是有问题,以后遇到这种题一定要小心!!

我不小心把n=1的情况搞错了~~多输出了一行空行!

#include <iostream>
using namespace std;
int main()
{
	char ch;
	int n,i,j;
	int flag=0;//空行用 
	while(cin>>ch&&ch!='@'){
		cin>>n;
		if(flag) cout<<endl;
		flag=1;
		for(i=1;i<n;i++) cout<<" ";
		cout<<ch<<endl;
		for(i=2;i<n;i++){
			for(j=1;j<=n-i;j++) cout<<" ";
			cout<<ch;
			for(j=1;j<=2*i-3;j++) cout<<" ";
			cout<<ch<<endl;
		}
		if(n!=1)
		{
			for(i=1;i<=2*n-1;i++) cout<<ch;
			cout<<endl;
		}
	}
	return 0;
}

解题转自:http://blog.csdn.net/xujinsmile/article/details/7856380


  1. 第一句可以忽略不计了吧。从第二句开始分析,说明这个花色下的所有牌都会在其它里面出现,那么还剩下♠️和♦️。第三句,可以排除2和7,因为在两种花色里有。现在是第四句,因为♠️还剩下多个,只有是♦️B才能知道答案。

  2. 这道题目的核心一句话是:取还是不取。
    如果当前取,则index+1作为参数。如果当前不取,则任用index作为参数。