金字塔废话:我如何用代数方式排除 i=0 而不是使用 if 条件语句?
Pyramid Nonsense: How can I algebraically exclude i=0 instead of with an if conditional statement?
我制作了这个:
---------------------
*-------------------*
**-----------------**
***---------------***
****-------------****
*****-----------*****
******---------******
*******-------*******
********-----********
*********---*********
**********-**********
*********---*********
********-----********
*******-------*******
******---------******
*****-----------*****
****-------------****
***---------------***
**-----------------**
*-------------------*
但我对第一行不满意。我想排除它,所以我制作了一个新的排除 i=0 的方法,并在 for 循环周围使用 if-conditional 包装器。我想知道是否有人知道更清洁的解决方案。 (仅供参考,这是一个测试问题,我的解决方案非常草率。我正在为此练习更清洁的方法(愚蠢的金字塔编程)。
代码
看看评论// 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");
}
}
你能从 1 开始 i
吗?
/* Take care of the top */
for (int i=1;i<n;i++) {
只需从 1 而不是 0 开始循环。或者,在 j
.
的循环中将 <
替换为 <=
另请注意,在中间,您的星星并未完全相遇,它们之间仍有间隙。这是有意为之的行为吗?
我猜你想知道为什么这个"trick"只需要在开头,而你的现代艺术画的底部没有空行。这种 "miracles" 称为差一错误。您应该仔细检查您的代码是否存在边界情况,看它是否按设计执行。
我制作了这个:
---------------------
*-------------------*
**-----------------**
***---------------***
****-------------****
*****-----------*****
******---------******
*******-------*******
********-----********
*********---*********
**********-**********
*********---*********
********-----********
*******-------*******
******---------******
*****-----------*****
****-------------****
***---------------***
**-----------------**
*-------------------*
但我对第一行不满意。我想排除它,所以我制作了一个新的排除 i=0 的方法,并在 for 循环周围使用 if-conditional 包装器。我想知道是否有人知道更清洁的解决方案。 (仅供参考,这是一个测试问题,我的解决方案非常草率。我正在为此练习更清洁的方法(愚蠢的金字塔编程)。
代码
看看评论// 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");
}
}
你能从 1 开始 i
吗?
/* Take care of the top */
for (int i=1;i<n;i++) {
只需从 1 而不是 0 开始循环。或者,在 j
.
<
替换为 <=
另请注意,在中间,您的星星并未完全相遇,它们之间仍有间隙。这是有意为之的行为吗?
我猜你想知道为什么这个"trick"只需要在开头,而你的现代艺术画的底部没有空行。这种 "miracles" 称为差一错误。您应该仔细检查您的代码是否存在边界情况,看它是否按设计执行。