Math 如何计算给定宽度和高度范围内尺寸对的唯一数量?

Math 如何计算给定宽度和高度范围内尺寸对的唯一数量?,math,Math,在我的程序中,我生成了唯一的宽度x高对,例如20x25。 假设我的高度范围是20到40,宽度范围是10到50 在我的场景中,不应该有双倍对,例如,如果有20x25,就不应该有25x20,因为这是一种相同的情况 我已经有了一个可以正常工作的实现,在这个实现中,这些都是在循环中正确生成的 现在我要找的是一个数学模型,它可以预先计算组合的数量来显示它,而不需要遍历整个循环 我相信一定有一个快速的计算可以用来解决这个问题。(这个问题几乎是一个编程问题。我会在这里给出一个简短的答案,但这个问题也可以在你添

在我的程序中,我生成了唯一的宽度x高对,例如20x25。 假设我的高度范围是20到40,宽度范围是10到50

在我的场景中,不应该有双倍对,例如,如果有20x25,就不应该有25x20,因为这是一种相同的情况

我已经有了一个可以正常工作的实现,在这个实现中,这些都是在循环中正确生成的

现在我要找的是一个数学模型,它可以预先计算组合的数量来显示它,而不需要遍历整个循环

我相信一定有一个快速的计算可以用来解决这个问题。

(这个问题几乎是一个编程问题。我会在这里给出一个简短的答案,但这个问题也可以在你添加一些自己的工作后在网站上提出来。我会让我的答案有点模糊,把编码留给你。)

首先决定你将得到多少对。在您的情况下,有
40-20+1=21
高度和
50-10+1=41
宽度,因此总共有
21*41=861

现在需要减去重复的数量。首先找到数字的范围,可以是高度和宽度。在您的情况下,是
20
40
,即
40-20+1=21
数字。这里的“复制”对中有两个不同的数字,其中较大的一个先出现。(我们将考虑当较大的一个最后是“原始”)的情况下,从“代码>21”/代码>中选择的不同数对的数目是第一个大于第二个的选择,这是一个著名的组合问题,用多种方法找到公式。我在这里只想说,答案是来自
21
的组合
2
,或者
21*20/2=210

因此,您的不容置疑的配对总数是
861-210=651

我用Python表达式检查了这个特殊情况

len(set([tuple(sorted((h,w))) for h in range(20,41) for w in range(10,51)]))
并得到了预期的结果,
651


你能把它变成一般情况下的一个简短计算吗?

谢谢你的回答。实际上我是用Java实现的,这一部分是为了前端提供输出预览,我想避免在这里出现循环,因为用户可以动态更改这些高度/宽度值,我想保持cpu使用率低。因此,我认为可以有一个更简单的数学计算来解决这个问题。@JanusReith:我不理解你的评论。我的算法不使用循环,使用简单的计算,速度非常快。(我的检查确实使用了循环。)您需要一些
if
语句来查找高度和宽度的重叠范围,但这会很快。如果此答案确实对您有所帮助,请单击答案左上角的复选框接受此答案。这也有助于其他人看到你的问题得到了回答。我不懂Java,所以我不能向您展示任何Java代码。谢谢,将答案标记为已接受。我只是想解释一下我关于循环的设想。我会尽力理解你对如何进行计算和实现它的解释。我还没有得到的是,
21*20/2
中的
20
是从哪里来的。很抱歉,我刚刚意识到有一个单独的与数学相关的堆栈交换。@JanusReith:如果高度和重量重叠处有
n
数字,那么重复的数量是
n*(n-1)/2
。一种方法是求和
0+1+2+…+(n-1)