gpt4 book ai didi

java - 如何在 1024X 10 矩阵中生成 0's and 1' 的组合

转载 作者:行者123 更新时间:2023-12-01 10:02:17 25 4
gpt4 key购买 nike

我必须生成矩阵中 0 和 1 的所有可能组合。例如:

0000000000, 0000000001, 0000000010, 0000000011.... etc.

是否有比使用嵌套 for 循环(如下所示)更好的方法?

class Reliability {
// Trying to create combinations of 0 and 1s
public static void main(String[] args) {
// Creating an array of size 1024X10
int connectMat[][] = new int[1024][10];

int count1 = 0;
// Intitially all rows are set to zero
for (int r1 = 0; r1 <= 1; r1++) {
// fill all rows with 0 and the 1
for (int r2 = 0; r2 <= 1; r2++) {
for (int r3 = 0; r3 <= 1; r3++) {
for (int r4 = 0; r4 <= 1; r4++) {
// Updating the elements of each row
connectMat[count1][0] = r1;
connectMat[count1][1] = r2;
connectMat[count1][2] = r3;
connectMat[count1][3] = r4;

// Incrementing count to point to the next row
count1++;
}
}
}
}

最佳答案

这个问题直接转化为查看每个行号的二进制表示。我们可以使用位运算来提取必要的值。

final int BITS = 10;

int[][] connectMat = new int[1 << BITS][BITS];

for (int i = 0; i < (1 << BITS); ++i) {
for (int j = 0; j < BITS; ++j) {
connectMat[i][j] = (i >> (BITS-1 - j)) & 1;
}
}

请注意1 << 10等于 210 或 1024。这就解释了 1 << BITS .

了解(i >> (BITS-1 - j)) & 1 ,让我们看一些示例值。比方说i == 673 ,或1010100001以二进制形式。假设j == 2这意味着我们想要从左边算起的第三位。替换所有变量,我们有:

connectMat[673][2] = (673 >> (10-1 - 2)) & 1;

类次是673 >> 10-1 - 2 ,或673 >> 7 。换挡1010100001向右 7 位截掉最右边的 7 位,得到 101<strike>0100001</strike> 。看看我们想要的位现在是最右边的位了吗? final & 1提取最右边的位,所以我们得到 1作为最终结果。作业最终为:

connectMat[673][2] = 1;

关于java - 如何在 1024X 10 矩阵中生成 0's and 1' 的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36705390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com