c-打印带有单个for循环的数字模式,不带if语句



我需要使用不带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语句的情况下实现这一点。如有任何提示,我们将不胜感激。

  1. 制作一个循环,将整数321打印三次
  2. 修改循环打印语句以打印321除以10余数。现在每行都将打印1
  3. 打印语句后,将除法器乘以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";行"-外循环迭代器。但是,您不想写010等等,所以您也应该通过添加+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"); } }

最新更新