Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计算最接近给定数字的数字之和_C#_Arrays_Algorithm_Sum - Fatal编程技术网

C# 计算最接近给定数字的数字之和

C# 计算最接近给定数字的数字之和,c#,arrays,algorithm,sum,C#,Arrays,Algorithm,Sum,我想找出在C#中实现这一点的最佳方法: 我有一个数组,比如说20个数字,然后还有一个额外的变量。 我想得到最接近给定变量的数字之和。 假设我有1.1,1.5,1.7,1.9,2.2,3.1,3.2,1,5,4.5,4.1。然后,附加变量的值为5。 我想得到数组中最接近给定数字的一些数字的总和,一旦我得到这个数字,就从列表中删除这些数字,并将它们添加到一个新数组中。 欢迎每一条评论。 谢谢您正在为描述优化问题 问题是,所以没有已知的多项式解 然而,由于输入的规模相当小,检查所有子集的指数解决方案是

我想找出在C#中实现这一点的最佳方法: 我有一个数组,比如说20个数字,然后还有一个额外的变量。 我想得到最接近给定变量的数字之和。 假设我有1.1,1.5,1.7,1.9,2.2,3.1,3.2,1,5,4.5,4.1。然后,附加变量的值为5。 我想得到数组中最接近给定数字的一些数字的总和,一旦我得到这个数字,就从列表中删除这些数字,并将它们添加到一个新数组中。 欢迎每一条评论。
谢谢

您正在为描述优化问题

问题是,所以没有已知的多项式解

然而,由于输入的规模相当小,检查所有子集的指数解决方案是可行的,因为只有2^20~=1000000(实际上稍微多一些,但足够接近估计运行时间)

伪代码应该类似于:

getClosestSum(list,sum,number):
  if (list is empty):
      return sum
  candidate1 <- getClosest(list[1:],sum,number)
  candidate2 <- getClosest(list[1:],sum+list[0],number)
  if (abs(number-candidate1) < abs(number-candidate2)):
      return candidate1
  else:
      return candidate2
getClosestSum(列表、总和、数字):
如果(列表为空):
回报金额

候选1您正在描述的优化问题

问题是,所以没有已知的多项式解

然而,由于输入的规模相当小,检查所有子集的指数解决方案是可行的,因为只有2^20~=1000000(实际上稍微多一些,但足够接近估计运行时间)

伪代码应该类似于:

getClosestSum(list,sum,number):
  if (list is empty):
      return sum
  candidate1 <- getClosest(list[1:],sum,number)
  candidate2 <- getClosest(list[1:],sum+list[0],number)
  if (abs(number-candidate1) < abs(number-candidate2)):
      return candidate1
  else:
      return candidate2
getClosestSum(列表、总和、数字):
如果(列表为空):
回报金额

候选人1你如何确定哪个数字接近5?只有一个不同的数字可以最接近另一个。我想它的意思是:1.1+1.5+2.2=4.7哪个数字比4.5更接近5?1.1和4.1?@L.B如果你得到3.1和1.9的和,你会得到正好5。你如何确定哪个是接近5的数字?只有一个不同的数字可以最接近另一个。我想它的意思是:1.1+1.5+2.2=4.7,它比4.5更接近5。你的例子的答案是什么?1.1和4.1?@L.B如果你得到3.1和1.9的总和,你将得到5。