|
113 / 100 / 68
Регистрация: 21.04.2014
Сообщений: 1,420
|
|
Записать в один цикл10.09.2020, 10:44. Показов 783. Ответов 15
Метки нет (Все метки)
Здравствуйте.
Хочу попросить вашей помощи в написании как можно более короткого кода для решения следующей задачи: Имеется метод int GetNumber (int n). Его код недоступен, но известно, что в зависимости от переданного в него значения возвращаемое им число будет либо расти но только до определённого предела. На пример при передачи единицы будет возвращена пятёрка, при передаче двойки, вернётся семь, а вот при передачи тройки уже шесть и при дальнейшем увеличении передаваемого значения результат будет только уменьшаться. Обратная ситуация так же возможно и, на пример, при передаче нуля может вернутся число восемь, при передаче минус единицы вернётся двенадцать, а при минус двух уже будет только девять. Задача - найти такое передаваемое значение при котором возврат будет максимальным. Есть отправная точка. Пусть это будет число 100, его мы будем передавать изначально. Я эту задачу решил, но очень уж громоздко, как мне кажется. Сначала у меня идёт цикл do while в условии которого проверяется новое полученное значение с предыдущим, а в теле идёт увеличение передаваемого значения на 1. После цикла последнее полученное и переданные значения запоминаются и идёт такой же do while, но только с уменьшением передаваемого значения на 1. После него полученные ответы от двух циклов сравниваются и находится результат. Можно ли решить эту задачу существенно проще, в один цикл, на пример?
0
|
|
| 10.09.2020, 10:44 | |
|
Ответы с готовыми решениями:
15
Один сдвоенный цикл Двумерный массив за один цикл |
|
fly
4943 / 4626 / 843
Регистрация: 13.04.2015
Сообщений: 9,804
|
||
| 10.09.2020, 10:51 | ||
|
1
|
||
|
113 / 100 / 68
Регистрация: 21.04.2014
Сообщений: 1,420
|
|
| 10.09.2020, 10:56 [ТС] | |
|
I can, Что ж, для меня это элементарное совершенно не дошло. В частности не дошло как перестать искать путём увеличения значения на один и начать искать путём уменьшения, причём снова начав от исходного.
0
|
|
|
fly
4943 / 4626 / 843
Регистрация: 13.04.2015
Сообщений: 9,804
|
||
| 10.09.2020, 11:18 | ||
|
0
|
||
|
113 / 100 / 68
Регистрация: 21.04.2014
Сообщений: 1,420
|
|
| 10.09.2020, 11:22 [ТС] | |
|
I can, так, я либо что-то сейчас сильно не понимаю, либо задачу криво описал... Почему диапазон определённый? Я его совершенно не знаю.
0
|
|
|
fly
4943 / 4626 / 843
Регистрация: 13.04.2015
Сообщений: 9,804
|
||
| 10.09.2020, 11:24 | ||
|
0
|
||
|
113 / 100 / 68
Регистрация: 21.04.2014
Сообщений: 1,420
|
|
| 10.09.2020, 11:27 [ТС] | |
|
I can, знаете, спасибо Вам больше, я получил пищу для размышления, пойду я условия задачи пересмотрю) А то сейчас и правда выходит, что надо перебрать просто все значения int, а это просто нелепо...
0
|
|
|
Модератор
|
||
| 10.09.2020, 11:41 | ||
0
|
||
|
Модератор
|
||||||||
| 10.09.2020, 13:16 | ||||||||
|
Нет защиты от зацикливания при неправильной реализации GetNumber.
1
|
||||||||
|
fly
4943 / 4626 / 843
Регистрация: 13.04.2015
Сообщений: 9,804
|
|
| 10.09.2020, 13:19 | |
|
Элд Хасп, я думаю,ни фига не выйдет, график функции (грубо) примерно такой, нужно найти х
0
|
|
|
Модератор
|
|||
| 10.09.2020, 13:38 | |||
|
Он явно не соответствует условию задачи от TC: Для вашего графика, в общем виде, решения нет. Только сплошной перебор всех чисел. Добавлено через 3 минуты Для задачи TC максимум функции всегда будет при int.MaxValue. И надо найти при каком минимальном значении n достигается этот максимум.
0
|
|||
|
fly
4943 / 4626 / 843
Регистрация: 13.04.2015
Сообщений: 9,804
|
|
| 10.09.2020, 13:43 | |
|
1
|
|
|
Модератор
|
|
| 10.09.2020, 13:47 | |
|
I can, признаю - я не прав.
Тогда общего решения не будет. Добавлено через 2 минуты Тогда для поиска решения необходимо определить диапазон с одним локальным максимумом. Без этого решить без полного перебора будет невозможно.
0
|
|
|
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
|
|
| 10.09.2020, 14:19 | |
|
0
|
|
|
113 / 100 / 68
Регистрация: 21.04.2014
Сообщений: 1,420
|
|
| 11.09.2020, 08:46 [ТС] | |
|
Ого, не ожидал такого консилиума
![]() Прошу прощение, что стольких людей на это отвлёк, но, к сожалению, должен сообщить, что задача изначально была сформирована не совсем верно. Оказывается метод GetNumber по сути строит какую-то параболу. И делает это не самым очевидным образом: В большинстве случаев первое переданное значение становится наименьшей точкой (на рисунке точка А). Но иногда по каким-то причинам это сделать невозможно и тогда первое переданное значение становится другой точкой (на пример точкой В). Как именно выбирается где будет эта другая точка, установить пока что не удалось. Ну и следовательно условие, что если полученное значение стало уменьшаться, то дальше расти оно не будет - не всегда верно, ведь мы можем начать в точке В. Ну а задача сводится к определению максимального передаваемого значения при котором одна из ветвей параболы достигает максимального значения (предполагается, что парабола ограничена сверху).
0
|
|
|
Модератор
|
||
| 11.09.2020, 11:09 | ||
|
Если это ПАРАБОЛА, то у неё нет МАКСИМУМА, есть только минимум - это точка А на вашем рисунке. Если же есть на ветвях перегибы в обратную сторону, то это уже не парабола. Как решать в общем виде по неизвестной функции... даже предположить не могу. Нужно уточнить характер функции.
0
|
||
| 11.09.2020, 11:09 | |
|
Помогаю со студенческими работами здесь
16
Заменить цикл на один запрос Цикл выполняется один раз Вычислить, используя один цикл Создать программу по всем 3 видам циклов...цикл с параметром,цикл с условием,цикл,и цикл с предусловием... Записать как цикл Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|