首页 > 解决方案 > 如何正确格式化 C 中的这些循环,我的教授希望它如何?

问题描述

对于我的实验室项目,我必须

对于 0 < n<= 100 的每个整数,找出所有介于 1 之间且n除以无余数的整数n

我已经制定了代码,但我不确定如何按照他想要的方式格式化它。

格式: number(# of factors): factors

例子:

2:( 2) 1,2
3:( 2) 1,3
4:( 3) 1,2,4

当前输出的样子:

1: 1
2: 1
2: 2
3: 1
3: 3
4: 1
4: 2
4: 4
5: 1
5: 5
6: 1
6: 2
6: 3
6: 6
7: 1
7: 7
8: 1
8: 2
8: 4
8: 8
9: 1
9: 3
9: 9
10: 1
10: 2
10: 5
10: 10
#include <stdio.h>

int main() {
    int ini[100], i, j, d, n = 0;

    for (i = 1; i <= 100; i++){
        n = n+1;
        ini[i] = n; 

        for (d = 1; d <= n; d++){
            if (ini[i] % d == 0)
                printf("%d: %d\n", ini[i], d);
        }    
    }    
}

标签: c

解决方案


哦,来吧,让我们在这里玩得开心。其他人都在建议“通常”的方式。但是回到过去(tm),我们没有内存可以浪费在诸如跟踪事物之类的事情上。我们只是把纸当作我们的记忆!:-)

我建议遍历要测试的值(1 - 100),然后在第一个循环内有另一个从 1 到 n 计数的循环,打印除数值,其余数为零。在循环结束时,我会叠印该n值,然后添加找到的因子数,然后循环返回下一个值。

在代码中,这看起来很像:

#include <stdio.h>

int main()
  {
  int n, d, i;
  int factor_count;

  for (n = 1 ; n <= 100 ; n += 1)
    {
    printf("%3d(   ): ", n);

    factor_count = 0;

    for (d = 1 ; d <= n ; d += 1)
      {
      if (n % d == 0)
        {
        printf("%c%d", (factor_count > 0 ? ',' : ' '), d);
        factor_count += 1;
        }
      }

    printf("\r%3d(%3d)\n", n, factor_count); 
    }
  }

这段代码利用了这样一个事实:\r将打印托架(或视频终端上的光标)返回到左边距而不推进滚轮(或光标 - 真的,光标太忙了,需要休息!:-)下一行,为了避免必须保留一个数组来存储因子。在旧的 ASR-33 电传打字机上观看运行会很有趣——有人要测试吗?

:-)


推荐阅读