|
6 / 4 / 2
Регистрация: 09.01.2018
Сообщений: 59
|
||||||
Можно ли построить из заданного набора выражение, равное числу N27.03.2019, 22:15. Показов 12161. Ответов 127
В сборниках занимательных математических задач встречается такой тип задач, когда надо из заданных чисел и арифметических знаков составить выражение, дающее какое-то заданное число. Пример такой задачи: "Составьте из чисел 4, 1, 8, 7 и арифметических знаков выражение, равное 24". Ответом может служить такое выражение: "(8-4) * (7-1)". К сожалению, некоторые авторы допускают ошибки и предлагают нерешаемую задачу, поэтому их начальник обратился к программистам.
Необходимо написать такую программу, которая определяет, можно ли построить из заданного набора выражение, равное числу N или нет. Так как это только прототип, то достаточно написать программу, которая работает только с наборами из 4-х чисел, а число N всегда равно 24. Допустимые арифметические операторы: сложение, вычитание, умножение, деление, скобки. На входе: массив из 4-х целых чисел от 1 до 9. На выходе: true (если из заданного набора можно построить выражение, равное 24) или false (если из заданного набора такого выражения построить нельзя). Пример 1. На входе: [4, 1, 8, 7] На выходе: true Пояснение: (8-4) * (7-1) = 24 начал писать.... вроде как что-то да и получалось, но тут возник с подставлением скобок. и никак не могу придумать как правильно их ставить. ведь если она открывается или закрывается, то и расположение относительно арифм.знака меняется. вот код который получился, но не работает. подскажите как поступить. и можно ли как-то упростить эту гору циклов:
0
|
||||||
| 27.03.2019, 22:15 | |
|
Ответы с готовыми решениями:
127
Проверить, можно ли из заданного набора букв составить заданное слово Определить, сколько прямоугольных треугольников можно создать из заданного набора точек |
|
502 / 348 / 134
Регистрация: 14.06.2016
Сообщений: 669
|
||
| 31.03.2019, 17:31 | ||
|
List.of в java9 появилась.
0
|
||
|
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
|
|||||||||||
| 31.03.2019, 20:53 | |||||||||||
|
криво, но работает для любой длинны цифр:
вывод:
2
|
|||||||||||
|
0 / 0 / 0
Регистрация: 29.03.2019
Сообщений: 61
|
|
| 31.03.2019, 22:04 | |
|
ArtemFM, если учитывать здание, то длинный код. А вот если бы вдруг задали (дополнительно) переделать задание так, чтобы оно выводило ещё и все варианты, то довольно неплохо всё получилось.
Добавлено через 1 минуту К слову, в коде где-то есть ошибка. Вывелся вариант: 8*4-7+1, результат - 26, а не 24. И таких результатов много. Добавлено через 3 минуты Всего их десять: =8*4-7+1, =8*7-1*4, =4*8-7+1, =7-1*4*8, =8*4-1+7, =4*8-1+7, =8*7-4/1, =7-4/1*8, =7-4*1*8, =8*7-4*1. Результат всех этих операций не равен 24, но они были выведены. Скорее всего, ошибка в том, что не проставлены скобки. Добавлено через 1 минуту 8*4-7+1=26, а вот 8*4-(7+1)=24. 8*7-1*4=52, а 8*(7-1*4)=24. Остальные не смотрел, но, думаю, что в том же духе.
0
|
|
|
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
|
||
| 31.03.2019, 22:24 | ||
|
Timoved,
первое: всегда нужно стараться делать задачу так, чтоб она была более универсальна и её доработка не требовала много усилий второе: кода много и можно алгоритмы методов усовершенствовать и сократить, я знаю, но написал часа за 3 на скорую руку. Если потратить ещё 2 раза по столько же, то можно его усовершенствовать третье: по поводу неправильных вариантов. Тут верно. Там не очень правильно расчитывается понижение приоритета операции. Отправил, потом увидел, но сейчас уже не очень голова соображает переделывать метод getPriority() и getString(), но на свежую голову исправить не проблема P.S. Код даёт лишь пищу для размышлений, а не служит для сдачи. Суть его в том, что он сразу ищет все решения и варианты решений и помещает их в дерево. А уже потом при вызове checkAnswer и getAnswers берёт всё ужде из дерева, где всё есть. Чисто написать для пищи к размышлению ))) Добавлено через 1 минуту
0
|
||
|
0 / 0 / 0
Регистрация: 29.03.2019
Сообщений: 61
|
||
| 31.03.2019, 22:30 | ||
|
В целом, хорошо. Хотя бы более-менее читаем код. Я лишь отчасти согласен.
0
|
||
|
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
|
||
| 31.03.2019, 22:33 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 29.03.2019
Сообщений: 61
|
|
| 31.03.2019, 22:49 | |
|
ArtemFM, нет, ограничений по числу строк нет. Вообще нет никаких ограничений. Просто не ясно, что требуется показать в своем решении. Показать логику - ну, маловероятно. Показать свои знания - ну, тогда чего идти как бы учиться, на лабу? Вот что-то про деление с дробями упоминали. Просто не ясно, что требуют как бы от потенциальных кандидатов. И можно ведь на разном уровне писать. Я написал на самом простом, самом низком уровне.
0
|
|
|
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
|
|
| 31.03.2019, 22:56 | |
|
Задача, на самом деле, не так и проста. Тут по сути есть где и рекурсию применить и коллекции и алгоритмы.
Я не знаю, какой у Вас там входной порог на курсы, но если такая задача, то по крайней мере отсеивается людей не мало... Возможно им достаточно, чтоб просто работала. Я не знаю. Но сама задача даёт попыхтеть мозгу ) Хотямдля какого-то, возможно, эта задачка раз плюнуть, но для меня она вызвала интерес, потому что такую задачу ни разу не реализовывал.
0
|
|
|
0 / 0 / 0
Регистрация: 29.03.2019
Сообщений: 61
|
|
| 01.04.2019, 11:54 | |
|
ArtemFM, я умаю, всё относительно. Там два шага. Вначале нужно разработать функцию. Представьте ваше решение в виде java-функции вида:
public boolean canBeEqualTo24(int[] nums) { ... } Ввиду того, что простая постановка вопроса, потому и решил простой алгоритм отправить. Добавлено через 21 секунду А на втором этапе - собеседование с преподавателем.
0
|
|
|
0 / 0 / 0
Регистрация: 29.03.2019
Сообщений: 61
|
|
| 01.04.2019, 20:24 | |
|
Пришёл ответ. Мой вариант не верный. Неверно решает. Не зря нам про округления говорилис.
0
|
|
|
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
|
|
| 01.04.2019, 20:47 | |
|
А при чём тут округление?
Смотри, в итоге должно получится 24, судя по названию метода. У них просто есть для теста n кол-во выражений с 4-мя числами, которые дают 24 и проверяют метод на корректность По сути нам нужно получить int. На кой нам огруглять? Допустим 6 / 4 * 2 * 8 = 24 ок, тут 6/4 даёт нам 1,5, затем 3 и 24... Но программа всегда может обойти получение дробного числа: 6 * 2 / 4 * 8 = 24 и нет дробей Добавлено через 1 минуту По мне так вообще должна программа смотреть, если b == 0 || a % b != 0 - то это выражение даже не рассматривать! Добавлено через 4 минуты а огругление вообще может сделать злую шутку: 0.9 * 10 = 90; а вот если бы мы 0.9 округлили до 1, то получили бы 100. Это вообще большая погрешность. или 0.4 * 10 = 4 против округлённого 0.4 в 0 * 10 = 0 Добавлено через 8 минут в Вашем задании нужно просто учесть, что есть 4 числа a, b, c, d они могут: - считаться сначала по отдельности (a op b) op (c op d); - считаться блок цифр и одно число (a op b op c) op d - и просто линейно a op b op c op d; и потом по таким комбинациям генерировать возможные расстановки операторов и цифр...
0
|
|
|
0 / 0 / 0
Регистрация: 28.03.2019
Сообщений: 25
|
|||
| 01.04.2019, 20:52 | |||
|
Добавлено через 3 минуты
0
|
|||
|
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
|
|
| 01.04.2019, 21:10 | |
|
А с чего Вы вообще решили, что нужно что-то округлять???
0
|
|
|
0 / 0 / 0
Регистрация: 29.03.2019
Сообщений: 61
|
|
| 01.04.2019, 21:14 | |
|
Проблема в том, что result.equals(24) выдаёт истину только в том случае, когда result=24, а если result=24.0, выдаёт ложь. Это можно легко поправить, изменив на result.equals(24) || result.equals(24.0). Может, кто посоветует, как можно ещё это сделать?
Добавлено через 2 минуты Вот полный текст задания. Задание по Java В сборниках занимательных математических задач встречается такой тип задач, когда надо из заданных чисел и арифметических знаков составить выражение, дающее какое-то заданное число. Пример такой задачи: "Составьте из чисел 4, 1, 8, 7 и арифметических знаков выражение, равное 24". Ответом может служить такое выражение: "(8-4) * (7-1)". К сожалению, некоторые авторы допускают ошибки и предлагают нерешаемую задачу, поэтому их начальник обратился к программистам. Необходимо написать такую программу, которая определяет, можно ли построить из заданного набора выражение, равное числу N или нет. Так как это только прототип, то достаточно написать программу, которая работает только с наборами из 4-х чисел, а число N всегда равно 24. Допустимые арифметические операторы: сложение, вычитание, умножение, деление, скобки. На входе: массив из 4-х целых чисел от 1 до 9. На выходе: true (если из заданного набора можно построить выражение, равное 24) или false (если из заданного набора такого выражения построить нельзя). Пример 1. На входе: [4, 1, 8, 7] На выходе: true Пояснение: (8-4) * (7-1) = 24 Пример 2. На входе: [1, 2, 1, 2] На выходе: false Пояснение: из данного набора чисел невозможно составить выражение, равное 24. Примечание: убедитесь, что в вашем решении деление корректно работает с дробями, т.е. например 4 / (1 - 2/3) = 12. Представьте ваше решение в виде java-функции вида: public boolean canBeEqualTo24(int[] nums) { ... }
0
|
|
|
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
|
|
| 01.04.2019, 21:19 | |
|
так и не должно получаться у Вас вообще дробное число. если допустим в варианте решения есть деление, которое приведёт к дробному числу, то это выражение вообще рассматривать не нужно. Должно быть деление нацело! Откуда вообще Вы взяли 24.0 24.00008. Таких ответов вообще быть не должно. Только целые и int
0
|
|
|
0 / 0 / 0
Регистрация: 28.03.2019
Сообщений: 25
|
||||
| 01.04.2019, 21:28 | ||||
|
Добавлено через 2 минуты целое число можно представить как 24 ,или например 24.0 ,или 24.00000000000000000 это все будет 24. и это все будет одно и то же целое число. в конторе которая дала это задание 24.0000000007 считается как 24. а если я округляю скажем 24.1 до 24 -то это уже не правильно .. вот такие пироги . Добавлено через 1 минуту Добавлено через 1 минуту
0
|
||||
|
0 / 0 / 0
Регистрация: 29.03.2019
Сообщений: 61
|
|
| 01.04.2019, 21:30 | |
|
Object result = engine.eval("(3/7+3)*7"); - результат 24.0
Object result = engine.eval("(1+1+1+)*8"); -результат 24 result.equals(24) - работает корректно только по отношению к результатам 24, а к результатам 24.0 - неверно. Как поправить? Как правильно сравнивать типы Object и другие? Например, float.
0
|
|
|
0 / 0 / 0
Регистрация: 28.03.2019
Сообщений: 25
|
|
| 01.04.2019, 21:32 | |
|
Timoved, обрезай ноль если он есть и потом сверяй с нужным ответом
0
|
|
|
0 / 0 / 0
Регистрация: 29.03.2019
Сообщений: 61
|
|
| 01.04.2019, 21:33 | |
|
Как обрезать? Пока сложность в том, как перевести тип object в любой другой.
0
|
|
|
0 / 0 / 0
Регистрация: 28.03.2019
Сообщений: 25
|
||||||
| 01.04.2019, 21:39 | ||||||
0
|
||||||
| 01.04.2019, 21:39 | |
|
Сколькими способами гирями заданного набора можно составить вес в v грамм Пирамиду какой наибольшей высоты можно построить из набора блоков Сколькими способами гирями заданного набора весов можно составить вес в v грамм? Строки. Напечатать все пары символов, которые можно из заданного набора составить
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|