gpt4 book ai didi

java - 生成与 3 位代码仅相差一位数的所有 3 位代码

转载 作者:太空宇宙 更新时间:2023-11-04 09:50:58 24 4
gpt4 key购买 nike

我需要找到所有不同的 3 位代码。此扫描通过 3 个嵌套的 fro 循环完成。

我想获取我生成的这个位代码数组,然后输出仅相差一位的所有其他代码。所以我试图生成一个 8*3 二维数组。我知道有 3 个代码仅相差 1 位数字,但我就是找不到一种方法将其编码出来。

这是我到目前为止所拥有的。

String[] codes = new String[8];
int count = 0;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
for (int k = 0; k < 2; k++) {
codes[count] = "" + i + j + k;
count ++;
}
}
}
String[] code_1 = new String[3];
String[][] codesNear = new String[8][3];
for(int h = 0; h < codesNear.length; h ++){
for(int i = 0 ; i < codes[1].length() ;i ++){
if(codes[h].charAt(i) == '1' ){
if(i != 2)
codesNear[h][i] = codes[1].substring(0,i) + "0" + codes[1].substring(i+1);
else codesNear[h][i] = codes[1].substring(0,i) + "0";
}
else {
if(i != 2)
codesNear[h][i] = codes[1].substring(0,i) + "1" + codes[1].substring(i+1);
else codesNear[h][i] = codes[1].substring(0,i) + "1";
}
}
}
for (String s : codes) {
System.out.println(s);
}
count = 0;
for(String[] s : codesNear){

System.out.println("Count" + count + "Code " + codes[count]);
for(String st : s ){
System.out.println(st);
}
count ++;
}
}

输出是这样的

Count0Code 000
101
011
001
Count1Code 001
101
011
000
Count2Code 010
101
001
001
Count3Code 011
101
001
000
Count4Code 100
001
011
001
Count5Code 101
001
011
000
Count6Code 110
001
001
001
Count7Code 111
001
001
000

正如你们所见,输出不正确。例如,对于 000,三个输出应该是 100 , 010 , 001 而不是 101 , 011 ,001

此外,是否可以使用此代码并使其能够读取某个数字 n,然后找到 n 长二进制代码的所有不同可能性

最佳答案

您可以通过将整数的最低 3 位转换为字符串的方法来简化此过程。

String bitString(int n) {
return new String("" + ((n>>>2)&1) + ((n>>>1)&1) + (n & 1));
}

然后,您可以对每个位位置(1: 001、2: 010、4:100)中带有 1 位的数字使用按位异或。然而,很难判断这是否是您从发布的问题中想要的。

String[][] codesNear = new String[8][4];
for(int i = 0; i < 8; i++) {
codesNear[i][0] = bitString(i);
codesNear[i][1] = bitString(i ^ 1);
codesNear[i][2] = bitString(i ^ 2);
codesNear[i][3] = bitString(i ^ 4);
}

要回答编辑中问题的其他部分,是的。但是,bitString 也必须修改

int numBit = 3;// or whatever number of bits up to the largest 2^numBit that can be stored in int. 
int numCombinations = 1<<numBits;//2^numBits (here numCombinations == 8)
String[][] codesNear = new String[numCombinations][numBits+1];
for(int i = 0; i < numCombinations; i++) {
codesNear[i][0] = bitString(i,numBits);
for(int j = 0; j < numBits; j++) {
codesNear[i][j+1] = bitString(i ^ (1<<j),numBits);
}
}

然后将 bitString 更改为此或类似的内容以构建字符串。简化是将数字移位以按位去除该位并加 1。

String bitString(int n, int numBits) {
StringBuffer ret = new StringBuffer(numBits);
for(int i = numBits; i > 0; i--) {
ret.append((n>>>(i-1))&1);
}
return ret.toString();
}

关于java - 生成与 3 位代码仅相差一位数的所有 3 位代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54758324/

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