【问题标题】:C++ Matrix combinationsC++ 矩阵组合
【发布时间】:2011-06-23 16:57:38
【问题描述】:

首先感谢您的阅读。我正在尝试制作一个“菜鸟”程序,我想使用注册码。 为了完成我的加密算法,我需要生成所有 4x4 矩阵,其中仅包含从 0 到 9 的数字,如下例所示:

4 4 6 8

5 2 4 3

8 5 2 9

2 7 2 6

我知道有很多这样的组合,但它不会阻止我。我尝试自己使用“for”来做到这一点,但我无法弄清楚。

【问题讨论】:

  • 不要只是询问我们如何做,而是发布您已有的内容,以便我们帮助您改进。对于 4 x 4 矩阵,首先创建一个多维数组。
  • 这是 10^16 种可能的组合。你确定不想停下来? :)
  • 您需要矩阵数学方面的帮助吗?
  • 将其存储在内存中大约需要 150,000 TB(假设每个数字使用 1 个字符)。我知道你说过大量的组合不会阻止你,但内存需求会。
  • 好的,改变分析。如果您在机器上每个时钟周期检查一个组合,则 3GHz 机器检查每个组合需要 31 天。再加上你可能会在每次迭代中使用超过一个时钟周期的事实,而且你要等待很长时间。

标签: c++ matrix combinations


【解决方案1】:

我会将 4x4 数字矩阵存储为 char[16],将前四个字符解释为第一行,接下来的四个字符作为第二行,等等。您可以通过递归轻松生成所有可能的值,使用 @ 987654321@ 在每个级别循环。

void print_all_possible_matrices(char *matrix, int level) {
    if(level == 16) {
        print_matrix(matrix);
    }
    for(int i = 0; i < 10; ++i) {
        matrix[level] = i;
        print_all_possible_matrices(matrix, level + 1);
    }
}

您可以通过以下方式使用它:

int main() {
    char matrix[16];
    print_all_possible_matrices(matrix, 0);
}

但这需要很长时间才能完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 2016-02-02
    • 2017-06-22
    • 1970-01-01
    • 2011-01-21
    • 2017-09-19
    • 1970-01-01
    相关资源
    最近更新 更多