-3

如何获得可以选择数组位置的所有可能方式?例如,对于大小为 2 的数组,有 3 种可能的第一个元素、第二个元素和这两个元素。对于大小为 3 的数组,可能是第一、第二、第三、第一和第二、第一和第三、第二和第三,最后是第一第二和第三。我想要一个简单的嵌套循环。

4

2 回答 2

1

嵌套循环在这里并不是真正的答案,因为嵌套的深度取决于数组的大小。

所以你认为二进制:大小N数组的子集对应于正确长度的非零二进制数,所以做类似的事情

for (int subset_c = 1; subset_c < (1<<N); subset_c++)
{
    { start thinking about a new subset }
    for (int j=0; j<N; j++)
    {
         if ((subset_c>>j)&1) { the subset should contain array[j] }
    }
}
于 2013-01-08T20:32:42.283 回答
0

您正在寻找能够生成 {0, 1 ..., n-1} 的所有可能子集的算法,并且有很多方法可以做到这一点。尝试快速搜索“生成所有子集”,您应该会找到大量解决此问题的好方法。两种主要方法涉及递归生成子集和使用二进制数。

希望这可以帮助!

于 2013-01-08T20:34:07.753 回答