我一直在谷歌搜索疯狂的人,但不能有任何特定的东西让我开始。请原谅我完全的noobiness和可能恶魔般的脱脂阅读能力。
基本上,我有一个包含9个问题的调查问卷,每个问题都有2个可能的答案。在做了数学运算(2 ^ 9)后,我知道有512个排列。
我希望生成所有排列的列表,不做任何重复,以便为我提供可能的答案组合列表。
我希望我的输出看起来像这样:
112112111
如果1s表示所选择的人对问题回答“a”而2s表示该人选择回答“b”。
任何帮助将不胜感激,谢谢。
答案 0 :(得分:4)
您只是枚举0到512之间的数字,并且您希望以其二进制表示形式打印字符串,其中0和1替换为1和2,适当填充,因此以下代码将起作用:
for (int i = 0; i < 512; i++) {
System.out.println(String.format("%9s", Integer.toBinaryString(i)).replace('1', '2').replace('0', '1').replace(' ', '1'));
}
请参阅此相关问题,以便在Java中生成填充二进制字符串:How to get 0-padded binary representation of an integer in java?
答案 1 :(得分:1)
一种可能的方法是找到111111111和222222222之间只包含1和2的所有数字。
类似的东西:
for (i=111111111 ; i<=222222222 ; i++)
if (number_has_only_one_or_twos(i))
print i
答案 2 :(得分:0)
如果我正确地阅读你的问题,你只需要0到511之间数字的二进制表示(因为511 - 0 + 1 = 512)。您需要做的就是找到该范围内每个数字的9位二进制表示。取0表示答案B,1表示答案A。
您可以轻松地将二进制数转换为字符串,并将0替换为2并打印输出。这就是数字二进制表示的美妙之处。这是找到给定范围内所有排列的最佳方法之一。
想象一下找到数组所有元素的排列。将数字从零范围调整到数组的大小,并取一个表示您想要使用该索引而使用零表示不使用该索引。无论何时遇到这个问题,它都会大大简化这个问题。