Быстрое и грязное решение может состоять в создании 2D-массива, индекс которого (в обоих измерениях) - это позиция числа в массиве, а значения - это комбинации. Примерно так:
//int i[] = { 1, 3, 5}, operation is 'add'
//you have a 3x3 array here:
//\ |1 3 5 <- the original values at their corresponding indices for quick reference, the array is the bottom right 3x3 matrix
//--+------
//1 |2 4 6
//3 |4 6 8
//5 |6 8 10
int[][] a = new int[3][3];
//in a loop fill the array
Если вы хотите найти комбинации для 6, вы можете проверить все значения и получить индексы x и y для значений, равных 6. (В примере: 0/2, 1/1 и 2/0 ). Затем найдите номера этих индексов в исходном массиве (например, 0/2 -> 1 и 5, 1/1 -> 3 и 3, 2/0 -> 5 и 1).
Обратите внимание, что это быстрый и довольно несовершенный способ (особенно для больших массивов), который может возвращать больше перестановок, чем вам нужно или нужно (0/2 и 2/0 одинаковы для операции add
). Однако это должно работать для многих возможных операций, например, x y будет другим для x = 1, y = 5 (результат: 1) и x = 5, y = 1 (результат: 5).