我需要使用不带if语句的单个for循环打印以下模式。
1
21
321
我首先尝试理解逻辑,并使用2 for循环对其进行编码:
for (int i = 0 ; i <= num; i++) {
int temp = i;
for (int j = 0; j < i; j++){
printf("%d", temp);
temp--;
}
printf("n");
}
然而,我不知道如何在没有for循环和no-if语句的情况下实现这一点。如有任何提示,我们将不胜感激。
- 制作一个循环,将整数
321
打印三次 - 修改循环打印语句以打印
321
除以10
的余数。现在每行都将打印1
- 打印语句后,将除法器乘以
10
,这样每次循环迭代后,除法器就会大10倍
您可以存储前一行并使用它生成新的行。这是一个天真的实现,最多可工作9行。
int main()
{
int num = 3;
char buffer[100] = {0};
char temp_buffer[200] = {0};
for (int i = 1 ; i <= num; i++) {
sprintf(temp_buffer, "%d%s", i, buffer);
printf("%sn", temp_buffer);
strcpy(buffer, temp_buffer);
}
return 0;
}
-
尝试编写尽可能接近最琐碎/规范形式的循环:
for(int i=0; i<n; i++)
这意味着:避免从1开始迭代,避免与<=进行比较,避免倒计数循环。所有这些东西都有地方放,但为了可读性和保持简单,尽可能避免它们。另外,可读循环通常也是快速循环。
-
在这种情况下,2个
for
循环不是一个坏主意。你可以把输出看作一个排序矩阵,然后有一个外部for
循环用于";行";内部一个用于";列";。 -
以我上面展示的规范形式编写外部
for
循环,其中n
将是最大值,例如3
。 -
编写内部CCD_ 12循环,使其从零迭代到"0";行"-外循环迭代器。但是,您不想写
0
、10
等等,所以您也应该通过添加+1来补偿这一点。因此内环的上限条件可以是CCD_ 15。 -
然后,当在内部循环中打印时(假设您接受了我的建议,使其递增计数(,从最大值
rows+1
开始递减打印,然后减去当前值。这就是(rows+1) - cols
。 -
在打印每一行之后,更改外循环中的新行,就像您已经在做的那样。
结果:
#include <stdio.h> #define MAX 5
int main (void) { for(int rows=0; rows<MAX; rows++) { for(int cols=0; cols<(rows+1); cols++) printf("%d",(rows+1)-cols); printf("n"); } }