您的位置:首页 > 其它

杭电OJ -- 2091 空心三角形

2015-09-25 22:53 323 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: