C++ 程序选择一些数字,不存在其和为 k 的子集


假设我们有两个数字 n 和 k。我们必须从 1 到 n 中选择最大的不同元素,这样没有子集的和等于 k。如果我们可以找到,则返回所选的数字。

因此,如果输入为 n = 5; k = 3,则输出为 [4, 5, 2]

步骤

为解决此问题,我们将遵循以下步骤 −

for initialize i := (k + 1) / 2, when i <= k - 1, update (increase i by 1), do:
   print i
for initialize i := k + 1, when i <= n, update (increase i by 1), do:
   print i

示例

让我们查看以下实现,以获得更好的理解 −

#include <bits/stdc++.h>
using namespace std;

void solve(int n, int k) {
   for (int i = (k + 1) / 2; i <= k - 1; i++) {
      cout << i << ", ";
   }
   for (int i = k + 1; i <= n; i++) {
      cout << i << ", ";
   }
}
int main() {
   int n = 5;
   int k = 3;
   solve(n, k);
}

输入

5, 3

输出

2, 4, 5,

更新于: 03-Mar-2022

168 浏览量

开始你的 职业生涯

通过完成课程获得认证

开始
广告