如果我正确理解你的问题,如果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
提高性能通过启动从a
b
和c
因为你抛弃所有的值其中b < a
或c < b
。这也应该消除您的if
声明的需要(我说应该只是因为我没有测试过)。由于三重嵌套循环的复杂性,我需要使用独立索引。
编辑2:忽略我。我做了combinatorics错误。假设An,k
是具有[n]
中的元素的长度为k
的无序集合的数量(这将实现你所期望的)。然后An,k = An-1,k + An,k-1
。我们知道An,1 = n(因为这些值是0,1,2,3,4,...,n)和A1,n = 1
(因为唯一的值可以是11111 ... 1 n次)。在这种情况下,我们感兴趣的是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)
但我没有做的工作肯定地说。
你能举一个你想要的阵列的样子吗?现在看起来您有两个长度为4的数组,您只需重复覆盖这些值,而无需使用它们。 – Maria
现在你正在独立循环你的'a,b,c',然后循环'd,e,f'。在第一个嵌套'for'完成时,你有'[num,num,num,3 * num]'作为你的数组。原则上,第二个循环的每次迭代都会生成与第一个循环的相应迭代相同的数据 - 并且嵌套循环将以相同的值退出。不确定你想要达到什么目的? – Floris
我想创建两个数组,在他们自己的不同运行时间,最后我想扫描所有数组,我查看是否只有当arrayOne和arrayTwo在每个数组的第三个元素中有相同的总和,然后显示重要的数组 – Mario