.net - 如何计算 2 个或更多不超过特定值的值集之间的可能数字的数量?

标签 .net algorithm math numbers combinations

当我对 pair 的两个元素求和时,如何从 n 个值的集合中计算出不超过特定值的可能的数字对的数量?

例如,如果我们想知道 0.1 到 100 之间的两组值之间的可能组合,我们应该计算 1000 x 1000 等于 100 万,对吧?但是,如何通过算法从这 100 万个组合中提取不超过 100 个(当您对它们求和时)的组合?

例如:

  • 向量 X 和 Y 的范围都在 0.1 到 100 之间(每个有 1000 个可能的数字)

  • 元素之和不超过100的对向量X和Y有哪些可能的组合?

可接受的情况是:

enter image description here

排除的情况如下:

enter image description here

对于 3 个案例场景或 n 个案例场景呢?

在 .Net 中是否有任何简单的代码来计算这个?或任何简单的数学公式?

提前致谢

最佳答案

没那么难

SortedSet<Tuple<decimal,decimal>> set = new SortedSet<Tuple<decimal, decimal>>();
int n = 0 ;

for ( decimal a = 0.1m ; a <= 100m ; a += 0.1m )
{
  for ( decimal b = 100m - a ; b > 0m ; b -= 0.1m )
  {
    if ( a+b > 100m ) throw new InvalidOperationException();
    ++n ;
    set.Add(new Tuple<decimal,decimal>(a,b)) ;
  }
}

一天结束时,n 为 499,500。

如果不构建 SortedSet 并使用 System.Diagnostics.Stopwatch 为其计时,它(在调试器中)的运行时间约为 4/100 秒(0.040456 秒)。构建 SortedSet 确实需要更长的时间(在调试器中为 2.47 秒)。

关于.net - 如何计算 2 个或更多不超过特定值的值集之间的可能数字的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22487672/

相关文章:

math - 计算任何给定 4 点的四面体的体积

c++ - 给定起点和终点以及距离,计算沿线的点

.net - ASP.net UpdatePanel 控件中可能存在错误?

C# winforms如何在不同的事件处理程序中访问同一对象

algorithm - 动态规划 : find the subset with product of all members is equals to given number

php - 在 PHP 中解析自定义搜索语法?

倒排索引搜索算法

javascript - 彩票系统锅师

c# - 在 .net 4 中获取连接字符串

c# - ArgumentOutOfRangeException 出现奇怪的本地化问题