|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
20.11.2019, 15:35 | #1 |
Регистрация: 20.11.2019
Сообщений: 4
|
НЕБОСКРЕБЫ Skyscrapers
Разъясните как написать программу на си по этой теме, хоть поле составить с помощью программы, сделанной на си.
Перед вами вид сверху на городской квартал. В каждой клетке стоит “небоскреб” высотой, равной числу в этой клетке. Числа с боков сетки означают количество “небоскребов”, видимых из соответствующей строки или столбца, если смотреть от этого числа. Задача – заполнить сетку числами так, чтобы в каждой строке и в каждом столбце каждое число использовалось лишь единожды. Последний раз редактировалось Senpai96; 21.11.2019 в 01:08. |
20.11.2019, 16:17 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
ну, это некая разновидность Судоку.
http://www.playsudoku.ru/skyscrapers.html решать можно, наверное, перебором. |
20.11.2019, 16:31 | #3 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
простой вариант для фиксированного размера квартала
1. заполнить одну ячейку (максимальной высотой) 2. заполнить следующую ячейку(тоже максимальной высотой) 3. проверить первое условие для двух ячеек(различность чисел) 4. если неудача то п.x+1 иначе п.5 5. посчитать число видимых.(со стороны заполнения!!!) 6. если видим больше, то п.x иначе п.7. 7. заполнить третью ячейку(и опять максимальной высотой) 8. проверить третью ячейку(аналогично второй)(различность + видимость) .. четвертую, пятую, и так до последней. x. уменьшить высоту в третьей и вернуться к п.8. x+1.уменьшить высоту во второй и вернуться к п.3. x+2.уменьшить высоту в первой и вернуться к п.2. а где -то надо будет еще проверить и другие направления видимости !!! "усложненный" вариант для произвольного размера 1. заполнить сетку числами(любыми ???)лучше максимальными что только уменьшать! 2.проверить условие различности чисел 3. если удача то п.4 иначе п. 6. 4. проверить выполнение условий наблюдения(посчитать число видимых с каждой точки и сравнить с заданным числом) 5. если ВСЕ сравнения успешны, то мы получили искомое (закончить ? п. 8) иначе п. 6. 6. изменить заполнение сетки (хотя бы в одном квадрате) так чтобы не получился уже проверенный вариант. уменьшить, а если нельзя уменьшить ??? то уменьшить соседний(предыдущий) и поднять до максимальной этот и ВСЕ последующие. 7. если ВСЕ варианты перебраны, то закончить(п.8) иначе п.2 8. вывести результаты. к п.6. как перебрать все варианты #14
программа — запись алгоритма на языке понятном транслятору
|
20.11.2019, 16:57 | #4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Коллега, простите, а какую задачу Вы пытаетесь решить?
сформировать новое поле для игры, или решить задачу по расстановке чисел там, где на заданном поле уже стоят некие корректные значения ? т.е. создать новое поле-судоку или решить заданное числами судоку? |
20.11.2019, 18:24 | #5 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
Так точно какие то условия должны быть. Иначе решений будет очень много.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
21.11.2019, 09:27 | #6 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
я так и не понял, какую задачу решает ТС - создания поля для игры или решение для частично заполненного поля. Предположу, что второе. Ну и в этом случае, возможно, что несколько вариантов заполнения подходят. Но это не проблема. Если несколько вариантов решения подходят, то достаточно найти один вариант (если иное не оговорено в условии). Ну это как и с обычным Судоку (надеюсь, Вы сталкивались) - Вам дано поле, там частично цифры стоят. Нужно заполнить пустые клетки. Вы в этом случае находите все варианты или Вам достаточно заполнить первым подходящим? |
|
21.11.2019, 10:14 | #7 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Головоломки судоку на бумаге решаются методом исключений возможных цифр из каждой клетки. Алгоритмически это очень громоздко. Программно перебором конечно проще, но пугает обычно возможное число вариантов перебора. А на практике их может быть и не много. Вот пример рекурсивного решения перебором судоку-жирандоль https://www.programmersforum.ru/show...21&postcount=9 Вполне за минимальное время решается. Возможно и этот судоку решается таким же методом за приемлемое время )
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
21.11.2019, 10:48 | #8 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
|
21.11.2019, 12:53 | #9 |
Регистрация: 20.11.2019
Сообщений: 4
|
.
Не совсем так, я не правильно выразил свою цель, скорее мне нужен толчок, так сказать часть кода, чтобы написать игру, потому что я не соображу с чего начать, делать мне через цикл for программу или через switch, вы мне подскажите как правильнее и легче.
|
29.11.2019, 23:45 | #10 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,063
|
Легче - через фриланс.
Правильнее - пройти тернистый путь изучения вопроса темы(самообразование). P. S. >>Небоскрёб<<
I am not a wizard, I am just learning.
Последний раз редактировалось Desc; 29.11.2019 в 23:54. Причина: Добавил P. S. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Игра небоскребы.... | 13au | Помощь студентам | 0 | 04.11.2010 22:35 |