杭电OJ -- 2091 空心三角形

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

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

Output
每个样板三角形之间应空上一行,三角形的中间为空。显然行末没有多余的空格。
 

Sample Input
   
   
   
   
X 2 A 7 @
 

Sample Output
   
   
   
   
X XXX   A A A A A A A A A A A AAAAAAAAAAAAA
 

再见再见挺无聊的,这种题目,多看一下题目,记住输出的每一行后面没有多余的空格,看一下示例,下面用-代替空格:

-A-

AAA

惊恐惊恐是错误的,正确如下:

-A

AAA

奋斗奋斗是不是很坑。代码如下:

/*空心三角形
 *很水,真的,我都不愿意拿这种题目来写博客了!
 */

#include <iostream>
using namespace std;
void print_x(char c, int n, int index1, int index2)
{
	if (index2 == n)
	{
		for (int i = 1; i <= n; ++i)
			cout << c;
	}
	else
	{
		for (int i = 1; i <= index2; ++i)
		{
			if (i == index1 || i == index2)
				cout << c;
			else
				cout << ' ';
		}
	}
	cout << endl;
}
int main()
{
	int n = 0;
	int index1 = 0;
	int index2 = 0;
	char c = ' ';
	bool is_first_tri = true; //是否为第一个三角形
	while (cin >> c && c != '@')
	{
		cin >> n;
		if (!is_first_tri)
			cout << endl;
		
		index1 = index2 = (2 * n - 1) / 2 + 1;
		while (index1 >= 1 && index2 <= 2 * n - 1)
		{
			print_x(c, 2 * n - 1, index1, index2);
			index1 -= 1;
			index2 += 1;
		}
		
		is_first_tri = false;
	}
	return 0;
}


你可能感兴趣的:(杭电OJ -- 2091 空心三角形)