Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2019, 15:35   #1
Senpai96
 
Регистрация: 20.11.2019
Сообщений: 4
По умолчанию НЕБОСКРЕБЫ Skyscrapers

Разъясните как написать программу на си по этой теме, хоть поле составить с помощью программы, сделанной на си.
Перед вами вид сверху на городской квартал.
В каждой клетке стоит “небоскреб” высотой,
равной числу в этой клетке. Числа с боков
сетки означают количество “небоскребов”,
видимых из соответствующей строки или
столбца, если смотреть от этого числа.
Задача – заполнить сетку числами так, чтобы в
каждой строке и в каждом столбце каждое
число использовалось лишь единожды.

Последний раз редактировалось Senpai96; 21.11.2019 в 01:08.
Senpai96 вне форума Ответить с цитированием
Старый 20.11.2019, 16:17   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, это некая разновидность Судоку.
http://www.playsudoku.ru/skyscrapers.html

решать можно, наверное, перебором.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.11.2019, 16:31   #3
evg_m
Старожил
 
Регистрация: 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
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 20.11.2019, 16:57   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
простой вариант для фиксированного размера квартала
Коллега, простите, а какую задачу Вы пытаетесь решить?
сформировать новое поле для игры, или решить задачу по расстановке чисел там, где на заданном поле уже стоят некие корректные значения ?

т.е. создать новое поле-судоку или решить заданное числами судоку?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.11.2019, 18:24   #5
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Так точно какие то условия должны быть. Иначе решений будет очень много.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 21.11.2019, 09:27   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от WorldMaster Посмотреть сообщение
Так точно какие то условия должны быть. Иначе решений будет очень много.
Условия чего, простите?
я так и не понял, какую задачу решает ТС - создания поля для игры или решение для частично заполненного поля.

Предположу, что второе.
Ну и в этом случае, возможно, что несколько вариантов заполнения подходят. Но это не проблема. Если несколько вариантов решения подходят, то достаточно найти один вариант (если иное не оговорено в условии).
Ну это как и с обычным Судоку (надеюсь, Вы сталкивались) - Вам дано поле, там частично цифры стоят. Нужно заполнить пустые клетки. Вы в этом случае находите все варианты или Вам достаточно заполнить первым подходящим?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 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
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Возможно и этот судоку решается таким же методом за приемлемое время )
скорее всего - именно так.

но, похоже, что автору темы это всё обсуждение не нужно.
Он пришёл в надежде получить готовый код на C, а его грузят какими-то обсуждениями.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.11.2019, 12:53   #9
Senpai96
 
Регистрация: 20.11.2019
Сообщений: 4
По умолчанию .

Не совсем так, я не правильно выразил свою цель, скорее мне нужен толчок, так сказать часть кода, чтобы написать игру, потому что я не соображу с чего начать, делать мне через цикл for программу или через switch, вы мне подскажите как правильнее и легче.
Senpai96 вне форума Ответить с цитированием
Старый 29.11.2019, 23:45   #10
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

Цитата:
Сообщение от Senpai96 Посмотреть сообщение
вы мне подскажите как правильнее и легче.
Легче - через фриланс.
Правильнее - пройти тернистый путь изучения вопроса темы(самообразование).

P. S.
>>Небоскрёб<<
I am not a wizard, I am just learning.

Последний раз редактировалось Desc; 29.11.2019 в 23:54. Причина: Добавил P. S.
Desc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Игра небоскребы.... 13au Помощь студентам 0 04.11.2010 22:35