Если я правильно понял ваш вопрос, если a=1, b=3, c=4
и d=2, e=3, f=3
вы хотели бы напечатать что-то по линиям 1 + 3 + 4 = 8 = 2 + 3 + 3
. Во-первых, то, что вы делаете прямо сейчас, - это создание двух массивов, таких как Флорис, описанных в комментарии. То, что вы хотите сделать, это сохранить все значения в одном массиве массивов следующим образом:
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
и c
от b
, так как вы выплеснуть все значения где b < a
или c < b
. Это также должно устранить необходимость в вашем заявлении if
(я говорю, должен только потому, что я не проверял это). Мне нужно было использовать независимый индекс из-за сложностей тройного вложенного цикла.
Редактировать 2: Игнорировать меня. Я неправильно сделал комбинаторики. Пусть An,k
- количество неупорядоченных множеств длины k
, имеющих элементы в [n]
(это позволит достичь того, чего вы желаете). Затем 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
Применить уравнение рекурсивно, пока не пришел к ответу. Например, если указать номер 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