Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Программирование java. Помогите с задачей

wise Знаток (282), открыт 22 часа назад
Помогите с задачей. Я много раз перепробовал и либо ошибка, либо неправильная комбинация. Задача на фото. Не использовать сложных методов.
3 ответа
Scp Foundation 3.0 Мастер (1224) 22 часа назад
public class ExpressionFinder {
private static final String NUMBERS = "123456789";
private static int target;

public static void main(String[] args) {
int t = 122; // Замените на любое натуральное число
target = t;
findExpression("", 0, 0);
}

private static void findExpression(String expression, int index, int currentValue) {
if (index == NUMBERS.length()) {
if (currentValue == target) {
System.out.println(expression);
}
return;
}

// Добавляем следующую цифру
char digit = NUMBERS.charAt(index);

if (index == 0) {
// Начинаем выражение с первой цифры
findExpression(expression + digit, index + 1, Character.getNumericValue(digit));
} else {
// Добавляем '+' перед следующей цифрой
findExpression(expression + "+" + digit, index + 1, currentValue + Character.getNumericValue(digit));
// Добавляем '-' перед следующей цифрой
findExpression(expression + "-" + digit, index + 1, currentValue - Character.getNumericValu
e(digit));
}
}
}
wiseЗнаток (282) 21 час назад
Программа ничего не выводит в консоль + нужно для любого натурального m, которое вводит пользователь
Cogni Просветленный (40002) 21 час назад
 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);
}
}
Александр Искусственный Интеллект (303415) 19 часов назад
показывай что именно ты "перепробовал"...
Похожие вопросы