金字塔废话:我怎样才能代数排除i = 0而不是if条件语句?

时间:2017-12-15 07:55:16

标签: c algebra

在您投票之前,请查看我的代码。我希望你看到这对数学书呆子来说是一个合理的问题。

我制作了这个:

---------------------
*-------------------*
**-----------------**
***---------------***
****-------------****
*****-----------*****
******---------******
*******-------*******
********-----********
*********---*********
**********-**********
*********---*********
********-----********
*******-------*******
******---------******
*****-----------*****
****-------------****
***---------------***
**-----------------**
*-------------------*

但我对第一线不满意。我想要排除它,所以我创建了一个新的,在for-loop周围使用if条件包装器排除i = 0。我想知道是否有人知道更清洁的解决方案。 (仅供参考,这是一个测试问题,我的解决方案非常草率。我正在为此练习更清晰的方法(愚蠢的金字塔编程)。

代码

查看评论// I want to exclude i=0 by using algebra in the for loop。有想法的人吗?

#include <stdio.h>
#include <stdlib.h>

int main(void) {

  /* Pyramid Size */
  int n = 10;

  /* Take care of the top */
  for (int i=0;i<n;i++) {
    for (int j=0;j<i;j++)
      printf("*");
    if (i != 0) { // I want to exclude i=0 by using algebra in the for loop
      for (int j=0;j<=n*2-i*2;j++) {
        printf("-");
      }
    }
    for (int j=0;j<i;j++)
      printf("*");
    printf("\n");
  }

  /* Take care of the bottom */
  for (int i=n;i>0;i--) {
    for (int j=0;j<i;j++)
      printf("*");
    for (int j=0;j<=n*2-i*2;j++) {
      printf("-");
    }
    for (int j=0;j<i;j++)
      printf("*");
    printf("\n");
  }
}

2 个答案:

答案 0 :(得分:2)

只需从1而不是0开始循环。或者,在<的循环中将<=替换为j

另请注意,在中间你的星星不会完全相遇,它们之间仍然存在差距。这是预期的行为吗?

我想你想知道为什么这个&#34;技巧&#34;只在开始时需要,而在现代艺术绘画的底部,没有空行。这种类型的奇迹&#34;被称为off-by-one错误。您应该仔细检查代码以查看边界情况,看它是否按设计执行。

答案 1 :(得分:1)

你可以从1开始i吗?

/* Take care of the top */
for (int i=1;i<n;i++) {