在您投票之前,请查看我的代码。我希望你看到这对数学书呆子来说是一个合理的问题。
我制作了这个:
---------------------
*-------------------*
**-----------------**
***---------------***
****-------------****
*****-----------*****
******---------******
*******-------*******
********-----********
*********---*********
**********-**********
*********---*********
********-----********
*******-------*******
******---------******
*****-----------*****
****-------------****
***---------------***
**-----------------**
*-------------------*
但我对第一线不满意。我想要排除它,所以我创建了一个新的,在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");
}
}
答案 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++) {