如果我正确理解了您的问题,a=1, b=3, c=4
并且d=2, e=3, f=3
您想按照1 + 3 + 4 = 8 = 2 + 3 + 3
. 首先,您现在正在做的是创建两个数组,例如评论中描述的 Floris。您要做的是将所有值存储在一个数组数组中,如下所示:
int max; \\ To determine the value of max see the edit below.
int array[][] = new int[max][num];
int index = 0;
for (int a=0; a < num; a++) {
for (int b=a; b < num; b++) {
for (int c=b; c < num; c++) {
array[index][0] = a;
array[index][1] = b;
array[index][2] = c;
array[index][3] = a + b + c;
index++;
}
}
}
for (int i = 0; i < max; i++) {
for (int j = i; j < max; j++) {
if (array[i][3] == array[j][3]) {
string outString = array[i][0] + " + " + array[i][1] + " + " + array[i][2] + " = " + array[i][3] + " = " + array[j][0] + " + " + array[j][1] + " + " + array[i][2];
System.out.println(outString);
}
}
}
b
您可以看到,我从froma
和c
from开始提高了性能,b
因为您丢弃了 whereb < a
或的所有值c < b
。这也应该消除您if
声明的需要(我说应该只是因为我没有测试过这个)。由于三重嵌套循环的复杂性,我需要使用独立索引。
编辑2:忽略我。我做错了组合数。让是包含元素An,k
的无序长度集的数量(这将实现您想要的)。然后。我们知道 An,1 = n(因为值是 0, 1, 2, 3, 4, ..., n),并且(因为唯一的值可以是 11111...1 n 次)。在这种情况下,我们对and感兴趣,因此插入我们得到的值k
[n]
An,k = An-1,k + An,k-1
A1,n = 1
n= num
k = 3
A_num,3 = A_num-1,3 + A_num,2
递归地应用方程,直到你得到答案。例如,如果 num 为 5:
A_5,3 = A_4,3 + A_5,2
= A_3,3 + A_4,2 + A_4,2 + A_5,1
= A_3,3 + 2(A_4,2) + 5
= A_2,3 + A_3,2 + 2(A_3,2) + 2(A_4,1) + 5
= A_2,3 + 3(A_3,2) + 2(4) + 5
= A_1,3 + A_2,2 + 3(A_2,2) + 3(A_3,1) + 2(4) + 5
= 1 + 4(A_2,2) + 3(3) + 2(4) + 5
= 1 + 4(A_1,2) + 4(A_2,1) + 3(3) + 2(4) + 5
= 1 + 4(1) + 4(2) + 3(3) + 2(4) + 5
= 5(1) + 4(2) + 3(3) + 2(4) + 5
看起来这可能会简化为(num + (num - 1)(2) + (num - 2)(3) + ... + (2)(num - 1) + num)
哪个是,binomial(num, num)
但我还没有做确定的工作。