Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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#_Algorithm_Integer Division - Fatal编程技术网

C# 如何检查一个整数是否是给定整数的和?

C# 如何检查一个整数是否是给定整数的和?,c#,algorithm,integer-division,C#,Algorithm,Integer Division,假设我有一个整数结果和一个整数数组,比如[a,b,c](不是固定长度)。我需要检测result=a*I+b*j+c*k,其中I,j,k>=0 如果可能的话,我更喜欢C/C的解决方案 PS问题在于预订系统,如果行程的持续时间是给定持续时间的组合,则可以出售行程 谢谢 如果我们有a=3,b=7 比rezult 20=3*2+7*2 结果9=3*3+7*0您的问题陈述过于模糊,无法确定-i、j、k的可能值是多少。。。如果输入向量不是固定长度 在我看来,你的问题似乎是的一个变体,这是一个一般的NP难问题

假设我有一个整数
结果
和一个整数数组,比如
[a,b,c]
(不是固定长度)。我需要检测
result=a*I+b*j+c*k
,其中
I,j,k>=0

如果可能的话,我更喜欢C/C的解决方案

PS问题在于预订系统,如果行程的持续时间是给定持续时间的组合,则可以出售行程

谢谢

如果我们有a=3,b=7 比rezult 20=3*2+7*2
结果9=3*3+7*0

您的问题陈述过于模糊,无法确定-i、j、k的可能值是多少。。。如果输入向量不是固定长度

在我看来,你的问题似乎是

的一个变体,这是一个一般的NP难问题

然而,对于小的例子,我们知道相当快的算法

这里的论文:似乎描述了以前的算法(其中包括Dijkstra最短路径算法的应用!),并给出了一个新算法,显然比以前的算法更快

在任何情况下,对于只有2个数字的情况,a和b使得gcd(a,b)=1,发现i,j>=0使得ai+bj=M容易求解

还知道,大于(a-1)(b-1)的任何数字都可以用i>=0和j>=0的形式ai+bj表示。Frobenius数被定义为无法以该形式表示的最大数,且存在于n>=2且gcd(a,b,c…)=1时

因此,在你的例子中,如果所涉及的数字足够小,你可以对数组进行排序,找到“最小”的两个a和b,使gcd(a,b)=1,然后看看M是否>a-1(b-1),这可以用a和b来解决


如果我是一个很好的问题,但澄清了首选结果是什么。假设a、b、c是持续时间,而i、j、k是每个持续时间的数量,您是喜欢最少的持续时间计数(i+j+k最小)还是更少的较长持续时间计数(优先考虑较低的a、b、c值)?(复杂但相当优化)我只想知道是否存在组合!你的期限是固定的吗?一些参数组合可以用“贪婪”算法简单地求解,而一些幂甚至比这更简单。