Задача на логику
Всем привет!
Собственно, снова понадобилась помощь дружного коллектива :) На носу всеми любимой летней сессии задали задания на UVA, которые обязательно нужно решить . Сказано - сделано. Практически все задачи были сделаны (язык программирования характерный - С++ или Java), а вот одно задание - хоть убей, не пойму. Нужна помощь с алгоритмом, если кто поможет - добра и счастье тебе, друг:) . А вообще - всем того же ;) http://uva.onlinejudge.org/index.php...m&problem=3937 Сама задача. UPD: Нашел код на сишке, но не могу понять алгоритма, может кто понял и объяснит, так же был бы крайне благодарен... По сути, мне важен именно алгоритм решения, ибо написать могу и сам . https://github.com/marioyc/Online-Ju...0-%20Stars.cpp C Уважением. Добавлено через 2 часа 49 минут Ну хоть предположения:( |
Re: Задача на логику
Для скорейшего понимания написали бы суть задания на русском, а то на английском ро ссылке тяжело вникать.
|
Re: Задача на логику
"Фернандо получил компас на день рождения, и теперь его хобби - рисовать звёзды. Сначала он делает N отметок на окружности, разделяя её на N равных дуг, потом соединяет каждую точку с каждой К-той точкой, и так до тех пор, пока не вернётся к первой точке2"
"В зависимости от значения К, Фернандо может достичь\не достичь всех точек на окружности; когда это случается - звезда называется завершённой. Например, когда N=8, возможные звёзды показаны на фигуре ниже. Звёзды а и с - завершённые, б и д - напротив, нет. В зависимости от значения N, есть вероятность нарисования всеразличных звёзд, Фернандо попросил тебя написать программу, которая при заданном значении N определяет количество возможных законченных звёзд, которые он может нарисовать." "Ввод: Ввод содержит несколько тестовых вариантов. Каждый тестовый вариант содержит одну линию (строку), включающую в себя число типа integer, =диапазон для N даётся=, указывая число дуг, на которые окружность была поделена. Вывод: Для каждого тестового варианта твоя программа должна вывести одну строку (линию), содержащую одну же линию с числом типа integer (=дословно: одну линию содержащуюю один инт=), показывая количество законченных звёзд, которые могут быть нарисованы. |
Re: Задача на логику
k - это количество пропускаемых точек, при построение очередного отрезка, k = 0 .. N-1
Одним из признаков, что звезда получилась является: 1. построение звезды закончилось в той же точке где и началось 2. количество отрезков равно количеству точек на окружности Но это не достаточное условие, нужно как то исключить попадание в одни и те же точки, надо подумать как. И кстати пример по вашей ссылке вряд ли является корректным решением этой задачи так как N по условию может быть очень большим числом и задан лимит в 2 секунды на работу программы. Но могу ошибаться, там основной цикл идет от 2 до корень из N. |
Re: Задача на логику
Цитата:
|
Re: Задача на логику
Пример глдянул только мельком, так не интересно :)
Добавлю еще условие 3. 3. если мы попали в исходную точку раньше времени (количество отрезков звезды < N) значит звезда не получилась. Думаю этого достаточно, теперь думаем как это решить быстро и элегантно. |
Re: Задача на логику
Цитата:
|
Re: Задача на логику
А как там пошагово запустить код на исполнение? Нужно регаться?
|
Re: Задача на логику
Цитата:
|
Re: Задача на логику
Да я не эксперт в алгоритмах. Возможно я вам совсем не оптимальный вариант решения предложил. Погодите разберусь в примере кода.
|
Текущее время: 15:27. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot