【问题标题】:keystroke generation击键生成
【发布时间】:2009-01-23 12:43:41
【问题描述】:

我有一个场景,我需要使用数字 2 到 9 生成所有可能的击键。可能的击键应该生成 2-git、3 位等最多 32 位数字。谁能告诉我解决这个问题的最佳方法是什么。

谢谢, 编辑

【问题讨论】:

    标签: c algorithm


    【解决方案1】:

    从一些简单的分析开始考虑可行性。一位数字有 8 个可能的值。两位数有 8 x 8。等等。现在拿起你的计算器计算 8 ^ 32。

    【讨论】:

    • 是的,我知道..但即使它运行了几天我也需要这样做.. :(
    • @Pete Kirkham,很酷,我不知道你可以将 google 用作计算器。
    【解决方案2】:

    您正在考虑进行相当多的计算。

    一种可能的方法是将数组作为数字序列的占位符,递增最高或最低索引,检查它是否溢出,然后将其“携带”到下一个索引并执行此操作直到你溢出“在另一端”的位置。从用 2 填充的数组开始。

    【讨论】:

      【解决方案3】:

      我会采用简单的递归方法,这里使用字符,但您也可以使用其他方式构建数字..

      在 C 中:

      #include <stdio.h>
      void keystrokes(int x, int lo, int hi, char array[]) {
        int i;
        if (x > hi)
          return;
        if (x >= lo) {
          array[x] = 0;
          printf ("%s\n", array);
        }
        for (i = 2; i < 10; i++) {
          array[x] = i+'0';
          keystrokes (x+1, lo, hi, array);
        }
      }
      int main(void)
      {
        char array[33];
        keystrokes(0, 2, 32, array);
      
        return 0;
      }
      

      可以稍微优化一下(例如,对于所有 32 位数字,它仍然会进行 10 次额外的递归调用),但仍然需要很长时间才能计算所有可能的组合。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-08
        • 2012-07-24
        • 2011-06-14
        • 2010-11-09
        • 1970-01-01
        • 2020-12-23
        • 1970-01-01
        相关资源
        最近更新 更多