【问题标题】:Algorithm for printing all possible 8 digit numbers [closed]打印所有可能的 8 位数字的算法[关闭]
【发布时间】:2013-02-26 23:22:55
【问题描述】:

打印所有可能的 8 位数字的算法是否需要 8 个 for 循环?即 10 次幂 n 时间复杂度。有没有办法可以减少循环次数?

【问题讨论】:

    标签: algorithm random numbers time-complexity


    【解决方案1】:

    有没有办法减少循环次数?

    是的:

    printf("00000000\n");
    printf("00000001\n");
    printf("00000002\n");
    printf("00000003\n");
    ....
    

    没有循环。只是打字很多。

    【讨论】:

    • 大声笑,其实是聪明的回答。我希望这只是讽刺
    • 不用全部输入,可以使用循环生成代码。
    【解决方案2】:

    让我们试试单循环

    int i;
    for (i = 10000000; i < 100000000; i++)
    {
        printf("%d\n", i);
    }
    

    (假设您的意思是十进制表示、c 语言和以非零数字开头的数字)

    如果你想打印所有的数字,你不会得到任何加速算法。

    【讨论】:

      【解决方案3】:

      不,没有办法降低复杂性。要生成 10^n 个输出,您需要迭代 10^n 次。

      【讨论】:

      • 这是一张非常漂亮的照片,Ransom。
      • @G.Bach,谢谢。这是我为 2011 年万圣节做的造型,现在我几乎不好意思放一张更准确的肖像。
      【解决方案4】:

      伪代码...

      for val in (10000000..99999999)
          display val
      

      是什么让您认为需要 8 个循环?

      【讨论】:

      • 如果有一些限制,比如如果一个数字以 4 开头,那么 4 不能在整个循环中重复。比如 4804123566 不是一个有效的数字。并且可能还有更多这样的条件。
      • 你的逻辑也和我上面提到的一样复杂。
      • 这是一个荒谬的评论。您的问题表明您想要“所有可能的数字”。但是,考虑到显示整数所需的处理,您最好使用 8 循环方法......除非您可以使用递归或带有堆栈的单循环来实现。这比保留 8 个循环变量要好,而且您可以轻松实现您提到的特殊规则。
      猜你喜欢
      • 2014-10-07
      • 1970-01-01
      • 2013-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多