如果我正確理解你的問題,如果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