public class ExpressionFinder {
public static void findSolution(int target) {
findCombinations(1, 0, 0, String.valueOf(1), target);
if (!found) {
System.out.println("Решение не найдено.");
}
}
private static boolean found = false;
private static void findCombinations(int index, int currentSum, int previousOperand, String currentExpression, int target) {
if (index > 9) {
if (currentSum == target) {
System.out.println(currentExpression + " = " + target);
found = true;
}
return;
}
// Вариант 1: Просто следующее число
if (index == 2) {
findCombinations(index + 1, currentSum + index, index, currentExpression + "+" + index, target);
findCombinations(index + 1, currentSum - index, index, currentExpression + "-" + index, target);
} else {
// Применяем предыдущий знак к previousOperand
int updatedSumPlus = 0;
int updatedSumMinus = 0;
if (currentExpression.contains("+") || currentExpression.contains("-")) {
char lastSign = ' ';
for (int i = currentExpression.length() - 1; i >= 0; i--) {
if (currentExpression.charAt(i) == '+' || currentExpression.charAt(i) == '-') {
lastSign = currentExpression.charAt(i);
break;
}
}
if (lastSign == '+') {
updatedSumPlus = currentSum + index;
updatedSumMinus = currentSum - index;
} else if (lastSign == '-') {
updatedSumPlus = currentSum + index;
updatedSumMinus = currentSum - index;
}
} else {
updatedSumPlus = index;
updatedSumMinus = -index;
}
// Складываем текущее число
findCombinations(index + 1, currentSum + index, index, currentExpression + "+" + index, target);
// Вычитаем текущее число
findCombinations(index + 1, currentSum - index, index, currentExpression + "-" + index, target);
// Объединяем с предыдущим числом (только если предыдущее число было однозначным)
if (previousOperand > 0 && previousOperand < 10) {
int combinedNumber = Integer.parseInt(String.valueOf(previousOperand) + index);
// Нужно "откатить" предыдущую операцию и применить с объединенным числом
// Это сложнее сделать без явного хранения операций.
// Проще обрабатывать объединение на предыдущем шаге.
}
}
}
public static void main(String[] args) {
int m = 122;
findSolution(m);
}
}