Optimization 用单圈绘制不规则形状

Optimization 用单圈绘制不规则形状,optimization,Optimization,最近,我一直在研究一个问题,程序将“绘制”(使用ASCII空格和星号)三个向下和两个向上的三角形,具有可变的高度,可根据用户的意愿更改其高度,从而形成以下形状: ***************************** ******* ******* ******* ***** ***** ***** *** * *** * *** * *** * *** * ***** *****

最近,我一直在研究一个问题,程序将“绘制”(使用ASCII空格和星号)三个向下和两个向上的三角形,具有可变的
高度
,可根据用户的意愿更改其高度,从而形成以下形状:

*****************************
 *******   *******   *******
  *****     *****     *****
   ***   *   ***   *   ***
    *   ***   *   ***   *
       *****     *****
      *******   *******
     *******************
(when user selects the height variable = 5)
以及:

等等

我确实解决了这个问题,因为蛮力方法非常简单,但我意识到这是多么糟糕的优化。我所做的是把它分成三部分:三个第一排,中间和最后三排。然后,我们在第一行中画6*
height
-1个星号,在第二行中打印一个空格,然后用第二行中的成对((3*
height
-3个星号),(3个空格))循环三次,在第三行中画三个空格并稍微修改成对,然后改变方法(因为我们现在也要考虑到向上的三角形)中心等等。它工作得很好,但它有很多圈,长话短说

今天,在课堂上讨论这个问题时,我的解决方案被接受了,但教授提到所有这些都可以用一个圈来完成。这让我思考,因为我想不出有什么方法可以用一个圈来画出这样一个不规则的形状。看起来这不是简单地打印“*”就可以完成的当某个坐标相等时,因为这里似乎没有坐标相等。你能帮我一下吗?真的有什么东西可以用一个圈来画它吗?

而不是

3 times
   top row
height - 3 times
   center row
3 times
   bottom row
你能行

height + 3 times
  if 3 top rows
    top row
  else if 3 bottom rows
    bottom row
  else
    center row

是的,这当然会优化代码,但它仍然不是一个循环,因为调用任何过程(无论是对于顶行、底行还是中间行)都会涉及到任何部分的另一个循环。
height + 3 times
  if 3 top rows
    top row
  else if 3 bottom rows
    bottom row
  else
    center row