对于给定的n个输入,我需要使用C ++生成所有可能的输入组合
eg. n =4
I need to get,
1010101010101010
1100110011001100
1111000011110000
1111111100000000
(编辑:如果不清楚,这些是按列读取的输入组合)
我需要这些来执行像&amp ;;这样的操作。和|所以如果我把它们作为n个不同的变量用它们的整数表示最好的话。
我尝试使用bitset进行32个输入组合但是需要很长时间才能处理。我希望你们有更好的实施方法吗?
EDIT : Example when n=3
10101010
11001100
11110000
答案 0 :(得分:4)
你的问题对我来说仍然完全不可理解。
但是,下面的代码会重现您的示例输出。
#include <iostream>
int main()
{
using namespace std;
int const n = 3;
int const nBits = 1 << n;
int powerOf2 = 1;
for( int i = 0; i < n; ++i )
{
for( int bitNum = 0; bitNum < nBits; ++bitNum )
{
cout << 1 - bitNum/powerOf2 % 2;
}
cout << endl;
powerOf2 *= 2;
}
}
现在我希望这不是功课。如果是那时你就是通过在SO上寻找答案来欺骗自己和他人(这将会咬你,其他人,后来)。对于家庭作业,请清楚地表明它是作业,然后我们可以相应地调整我们的答案。
干杯&amp;第h。,
答案 1 :(得分:2)
这是一个生成该输出的简短实现:
void print_mask(int n){
for (int level = 0; level < n; level++){
for (int i = (1<<n)-1; i>=0; i--) // we'll always output 2**n bits
printf("%d", (i >> level) & 1);
printf("\n");
};
};
答案 2 :(得分:1)
n = 4将是
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
不是你生成的(不确定你的意思是“n”)???
答案 3 :(得分:0)
你的问题并没有多大意义,但希望这有点像你想要的那样:
#include <stdio.h>
main(){
int n = 3;
int total = (n*n)-1;
char poss[total];
int i = 0;
for (i = 0; i < total; ++i){
poss[i] = i;
printf("%d \t",poss[i]);
printf("%d \n",poss[i] & 1);
}
}
所以n就是你所说的n,总数是n(3)位可以保存的总数。然后设置一个char数组,如果它太短,你可以使用int。所有可能的都添加了。这是因为真值表的可能性与那些位中的可能性相同。
第二个printf显示AND操作,这里我们将进行例如:
000 AND 001 => 000
001 AND 001 => 001
010 AND 001 => 000
011 AND 001 => 001
以您想要的方式查看Alfs代码的格式(特别是二进制而不是像这样的十进制)