首页 > 解决方案 > 找出总和等于 2020 的 n 个值

问题描述

我有一个Vec包含这些值的向量:

1721
979
366
299
675
1456

我正在努力寻找一种方法来获得n(我最初想为n=2)值的哪个组合的总和等于 2020。

在示例中很容易将其视为 1721 和 299 和 2020,但我的数据更长,我想概括为n值,以便我有一个函数,我设置一个向量和一个值来选择数字的组合(它可以是 2,3,5,..)。我的输出是c(1721,299).

标签: r

解决方案


您可以使用 获取输入数字的所有组合combn(),这将返回一个矩阵,其中组合是列。那么你只需要取每一列的总和,看看哪一个等于你的目标。

Vec <- c(1721,
  979,
  366,
  299,
  675,
  1456)
n <- 2

all_combinations <- combn(Vec,n)
all_combinations[,colSums(all_combinations) == 2020]

推荐阅读