#include #include using namespace std; int subsetSum(const vector& numbers, int mask) { int total = 0; for (int i = 0; i < static_cast(numbers.size()); ++i) { if (mask & (1 << i)) { total += numbers[i]; } } return total; } void printSubset(const vector& numbers, int mask) { cout << "{"; bool first = true; for (int i = 0; i < static_cast(numbers.size()); ++i) { if (mask & (1 << i)) { if (!first) { cout << ", "; } cout << numbers[i]; first = false; } } cout << "}"; } int main() { const int n = 10; vector numbers(n); cout << "请输入这 10 个数:"; for (int i = 0; i < n; ++i) { cin >> numbers[i]; } int firstMaskBySum[956] = {}; for (int mask = 1; mask < (1 << n); ++mask) { int sum = subsetSum(numbers, mask); if (firstMaskBySum[sum] == 0) { firstMaskBySum[sum] = mask; continue; } int otherMask = firstMaskBySum[sum]; int leftOnly = otherMask & ~mask; int rightOnly = mask & ~otherMask; if (leftOnly != 0 && rightOnly != 0) { cout << "找到两组非空且互不相交、和相同的子集:\n"; printSubset(numbers, leftOnly); cout << " 和 "; printSubset(numbers, rightOnly); cout << ",它们的元素和都是 " << subsetSum(numbers, leftOnly) << "。\n"; return 0; } } cout << "没有找到满足条件的两组子集。\n"; return 0; }