1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
| maksimla |
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: 1 |
В поездке ученики прибыли в n (0 < n ≤ 15) этажный дом. На одном этаже могут жить только одного пола дети.Учительница должда распределить их придерживаясь правилам с этажом нижей девочки могут жить над мальчиками и над девочками но мальчики могут жить только над девачками. На первом этаже могут жить и девачки и мальчики.
Напишите программу котоорая данным n написала сколько всго можит быть вариантов расселения учеников. Два разных варианта расселения считаются разными когда на одном сперва мальчики а потом девочки живут. Первичные данные 3 результат 5 Обьяснение когда n = 3 то тогда вариантов расселения есть 5 ддд,мдд,дмд,мдм,ддм. Д это девачка М это мальчик. Но ммд и дмм так неможит быть. Я совсем нечего непридумал как надо сделать и как останавливать сам цикл может дадите идею как это так сделать -------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
![]() ![]() |
| volvo |
Сообщение
#2
|
|
Гость |
Цитата и тут ведь наверное ошибка должна быть Ну, если б должна была быть - тебе бы наверное компилятор сказал бы об этом? Раз не говорит - значит нету Опять же, ты, видимо до сих пор с рекурсией не разобрался... Ее не пошагово прогонять надо, а взять лист бумаги и написать все, что куда передается. Вот смотри (для простоту возьмем N = 2): 0) count(2, ''); s = '', условие выхода не достигнуто, продолжаем: s = '', значит результат будет равен count(2,'m')+count(2,'f') 1) count(2, 'm'): s = 'm', опять же выходить рано, идем дальше: последний символ = 'm', значит результат будет = count(2,'mf') a) count(2, 'mf'); s = 'mf', все, дошли до второго этажа, результат = 1, он передается НАЗАД, в предыдущую формулу, в пункте (1), то есть, count(2,'m') = count(2,'mf') = 1... Это в свою очередь возвращается в формулу (0): count(2, '') = count(2,'m') + count(2,'f') = (заменяем рекурсивный вызов уже полученным результатом) = 1 + count(2,'f') (формула №4) Что у нас осталось неизвестным? Count(2, 'f')? Вот так же, как я расписывал все предыдущие вызовы, распиши это, и посмотри, чему будет равно это выражение, а потом результат подставишь в формулу №4 и увидишь, чему будет равно общее значение функции... |
maksimla рекурсивнвный подсчет как распределить мальчиков и девочек 9.11.2009 17:27
volvo Ну, так и пиши, по заданию:
function count(const n… 9.11.2009 18:03
maksimla Вот кажется разобрался как вызвать
program varen… 9.11.2009 20:03
maksimla 1 b) по условию count(2,'f') сравниваем s… 9.11.2009 21:00
volvo Молодец. Теперь понятнее, как собирается конечный … 9.11.2009 21:47
maksimla даже незнаю можетбыть более менее понятно спасибо 9.11.2009 23:56![]() ![]() |
|
Текстовая версия | 6.11.2025 23:23 |