问题 2828. -- 画圣诞树xmastree [1*]

2828: 画圣诞树xmastree [1*]

时间限制: 1 Sec  内存限制: 128 MB
献花: 3  解决: 3
[献花][花圈]

题目描述

圣诞树 文件名:xmastree
【问题描叙】
诞节要到了,不少商家在宣传板上绘制了圣诞树的图案,如图所示。一棵圣诞树由A和B两部分组成:
A是由n(n≥)个呈三角形的字符矩阵构成的,每个字符矩阵由三个参数ai、bi、ci唯一确定。Ai表示字符矩阵第一行字符的个数;bi表示字符矩阵从第二行开始每一行与它上面那行的字符数之差均为bi;ci则表示字符矩阵的行数。
B是一个x行y列的长方形,由x和y这两个参数唯一确定。
因为圣诞树是中轴对称的,所以根据所有的参数构成的圣诞树是唯一确定的。简单来讲,我们所说的一棵圣诞树就是像图那样的*矩阵,每一行的字符是指若干个连在一起的*。

Input

 【输入格式】输入数据分若干行。第一行是一个整数n,表示A部分中字符矩阵的个数。以下n行,每行有三个正整数ai、bi、ci(ai为奇数,bi为偶数)。
输入数据的最后一行,有两个正整数x、y(y是奇数),表示B部分的行数和列数。

Output

 【输出格式】对于输入数据给定的圣诞参数,输出与之对应的圣诞树矩阵。
【说明】
(1)输入数据保证圣诞树不会超出一页纸的范围。
(2)要求圣诞树是轴对称的,并且字符矩阵的第一列至少有一个非空格字符,即圣诞树尽量“顶格写”。在以上要求下,输出的圣诞树矩阵一定是唯一的(不考虑每行行末的空格)。

Sample Input

 【输入样例】
3
1 4 3
5 4 3
5 4 4
2 5 

Sample Output

 【输出样例】
        *
      *****
    *********
      *****
    *********
  *************
      *****
    *********
  *************
*****************
      *****
      ***** 

Hint

  【问题分析】
题目中已经提示我们,圣诞树是由A 和B 两部分构成。因此绘制图形也分两部分来考虑。而A 和B 的绘制都要考虑图形的对称轴。于是,将整个问题分解为三个子问题:
(1) 确定对称轴; (2)绘制A 部分; (3)绘制B 部分。
【问题分析】
分析子问题1 :设*个数最多的行有m 个*,那么A 和B 部分的对称轴所在列数就应该是(m + 1)div 2 。
分析子问题2 :A 部分分成了n 段树,每一段树的图形打印方式是类似的,所以只需要着眼于如何打印某一段树即可。这个小问题是一个关于循环的问题,在循环结构程序设计中已经研究过。
分析子问题3 :B 部分的填充比较容易,填入x 行,每行y 个*即可。再深入分析一下,还有一个巧妙的处理,B 部分实际上相当于A 中的特殊段:ai = y ,bi = 0 ,ci = x 。于是,子问题3 也可以归入子问题2 。
至此,成功解决了输出圣诞树这个问题。
【关键点】过程+找规律

输入

输出

提示

来源

[献花][花圈]