我有10个对象(n)我想要一个C ++代码,它只能在5个空格中打印这10个对象的所有排列,而不是对象的整个排列,例如在大小为5的数组中。
答案 0 :(得分:1)
这是一些伪代码,它创建5个元素的每个子集并置换它:
for z1 = 1:6
for z2 = (z1+1):7
for z3 = (z2+1):8
for z4 = (z3+1):9
for z5 = (z4+1):10
subset = [set[z1], set[z2], set[z3], set[z4], set[z5]]
for i = 1:(5!)
print(subset)
subset = next_permutation(subset)
end
end
end
end
end
end
这是一个示例代码
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> set {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
for (int z1 = 0; z1 < 6; ++z1) {
for (int z2 = z1 + 1; z2 < 7; ++z2) {
for (int z3 = z2 + 1; z3 < 8; ++z3) {
for (int z4 = z3 + 1; z4 < 9; ++z4) {
for (int z5 = z4 + 1; z5 < 10; ++z5) {
std::vector<int> subset {set[z1], set[z2], set[z3], set[z4], set[z5]};
for (int i = 0; i < 120; ++i) {
for (int j = 0; j < 5; ++j)
std::cout << subset[j] << " ";
std::cout << std::endl;
std::next_permutation(subset.begin(), subset.end());
}
}
}
}
}
}
return 0;
}
您可以使用递归函数代替5个循环来使代码动态化。