【问题标题】:Drawing an irregular shape with a single loop使用单个循环绘制不规则形状
【发布时间】:2013-11-22 00:41:57
【问题描述】:

最近我一直在解决一个问题,程序要“绘制”(使用 ASCII 空格和星号)三个向下指向和两个向上指向的三角形,变量 height 根据用户的意愿改变它们的高度它们形成以下形状:

*****************************
 *******   *******   *******
  *****     *****     *****
   ***   *   ***   *   ***
    *   ***   *   ***   *
       *****     *****
      *******   *******
     *******************
(when user selects the height variable = 5)

和:

*****************************************  
 ***********   ***********   ***********
  *********     *********     *********  
   *******   *   *******   *   *******
    *****   ***   *****   ***   ***** 
     ***   *****   ***   *****   ***
      *   *******   *   *******   *
         *********     *********
        ***********   ***********
       ****************************
(when user selects the height variable = 7)

等等。

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

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

【问题讨论】:

    标签: optimization


    【解决方案1】:

    代替

    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
    

    【讨论】:

    • 是的,这当然会优化代码,但它仍然不是一个循环,因为调用任何程序(无论是顶行、底行还是中心行)都会涉及任何部分的另一个循环。
    猜你喜欢
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    相关资源
    最近更新 更多