29 / 29 / 18
Регистрация: 13.02.2010
Сообщений: 145
1

Лесенки

08.01.2011, 15:48. Показов 7793. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача звучит так:
Лесенкой называется набор кубиков, в котором каждый более верхний слой содержит кубиков меньше, чем предыдущий. Подсчитать число лесенок, которое можно построить из N кубиков. (кубики, сложеные в один ряд тоже считается лесенкой). Подсчитать кол-во лесенок, которое можно построить из n кубиков.
Решение: Переформулируем нашу задачу на язык математики. В каждом следующем слое (считая сверху вниз) кубиков больше, чем в предыдущем, а в сумме их n. Значит, нам требуется представить n в виде суммы возрастающих натуральных слагаемых. Пусть в качестве первого слагаемого мы взяли L, тогда нам требуется n-L разбить на слагаемые. Но теперь добавляется дополнительное условие - слагаемые должны быть больше либо равны L+1. Значит, нам достаточно научиться считать число разбиений числа n на слагаемые не меньшие k (обозначим an, k). Есть два случая: слагаемое k либо входит в разбиение (таких способов an-k, k+1), либо нет (таких способов an, k+1). Так как никакое разбиение не подходит одновременно под оба эти случая, то an,k=an-k, k+1 + an, k+1. Заметим, что для единицы существует единственное разбиение: 1 = 1. Значит a1, 0 = a1, 1 = 1, a1, f = 0, где f >= 2. an, k удобно вычислять в порядке невозрастания k. При равных k - в произвольном порядке.
Но как это реализовать, рекурсией что ли? Если да, то как?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2011, 15:48
Ответы с готовыми решениями:

Задача Лесенки
Кажется я близок к решению этой задачи, но где-то допустил ошибку(в функции NumberOfLadders) и не...

Лесенки Рекурсия
У вас N одинаковых кубиков. Если всех их положить друг на друга, получится башенка высоты N. Можно...

Radeon 6930 и лесенки
Почему на максимальном сглаживании остаются лесенки? Моя видеокарта...

Левый отступ в виде лесенки
Здравствуйте, форумчане =) Столкнулся со следующей задачей - нужно сделать шаблон, в котором...

10
180 / 180 / 81
Регистрация: 18.12.2010
Сообщений: 346
09.01.2011, 08:55 2
Цитата Сообщение от Даня98 Посмотреть сообщение
Но как это реализовать, рекурсией что ли? Если да, то как?
Вот так примерно:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
type
  tInt= longint;
 
function Stairs(n,l: tInt): tInt;
begin
  Stairs:=byte(n=0);
  while l<n do begin
    Inc(l);
    Inc(Stairs,Stairs(n-l,l))
  end
end;
 
var
  n: tInt;
 
begin
  write('n = ');
  readln(n);
  writeln('total of ',Stairs(n,0),' stairs could be build');
  readln
end.
Даня98, ты не сказал, в каком диапазоне изменяется N. Приведенный мной код на FP работает примерно где-то до N=200. Дальше нужно переходить на int64 (или comp) с небольшой модификацией программы.

Мне понравился характер роста. До 10 результат не превосходит входного числа, а потом начинается ускорение роста.. Меня это даже как-то озадачило в начале )).

Если хочешь, могу дать также решение на основе процедуры (а не функции) - оно немного проще для понимания, мне кажется.
2
29 / 29 / 18
Регистрация: 13.02.2010
Сообщений: 145
09.01.2011, 12:30  [ТС] 3
Цитата Сообщение от use Посмотреть сообщение
Stairs:=byte(n=0);
А что это за строка, то есть что она значит?
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
09.01.2011, 12:35 4
(n=0) - может быть как правдой, так и ложью. То есть если n <> 0, то это запись вернет false.
byte (n=0) - явное приведение типов, то есть вместо false, мы получим 0 на выходе.

Вроде так.
2
29 / 29 / 18
Регистрация: 13.02.2010
Сообщений: 145
09.01.2011, 12:39  [ТС] 5
У меня программа выводит ошибку тут:
Pascal
1
Inc(Stairs,Stairs(n-l,l))
Я поменял это на:
Pascal
1
Stairs:= Stairs(n-l,l) + Stairs (n,l)
И идет неправильный ответ. При 3 должно быть 2 (в ряд, и 2 снизу 1 сверху), при 6 - должно быть 4, а прога выводит 1 и 1. Где исправить?
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
09.01.2011, 12:44 6
Pascal
1
Inc(Stairs, Stairs (n-l, l));
Увеличиваем Stairs на значение Stairs (n-l, l)
То есть:
Pascal
1
Stairs:=Stairs+Stairs (n-l, l);
0
29 / 29 / 18
Регистрация: 13.02.2010
Сообщений: 145
09.01.2011, 12:45  [ТС] 7
Неверное кол-во параметров.
0
180 / 180 / 81
Регистрация: 18.12.2010
Сообщений: 346
09.01.2011, 12:54 8
Ох.. Даня98, ну если используешь раритетный TurboPascal, то и пиши в раздел TurboPascal.. Я же словами написал, что прога под FP.

neske, спасибо за помощь )).
Но так:
Цитата Сообщение от neske Посмотреть сообщение
Stairs:=Stairs+Stairs (n-l, l);
- все же не пойдет. Имя функции как переменную можно использовать только в левой части.

Даня98, возьми изначальный вариант и замени в нем tInt с longint на integer. Прога скомпилится и будет работать, но диапазон уменьшится. Если хочешь ипользовать longint, введи дополнительную переменную, и перекладывай из нее в функцию при выходе. Показать?
2
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
09.01.2011, 13:35 9
Не знал, спасибо
0
180 / 180 / 81
Регистрация: 18.12.2010
Сообщений: 346
09.01.2011, 13:46 10
Цитата Сообщение от neske Посмотреть сообщение
Не знал, спасиб
для полноты картины: еще его можно передавать как var-параметр (тут как раз у меня этот случай на самом деле))
2
54 / 54 / 23
Регистрация: 02.02.2011
Сообщений: 436
05.02.2011, 17:12 11
use, на n > 100 алгоритм не работает
0
05.02.2011, 17:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.02.2011, 17:12
Помогаю со студенческими работами здесь

Создание коллекции (списка) в виде лесенки
Хочу создать много мерный список но так чтоб он был не чётко двумерный, а так чтоб в каждой строке...

Относительно низкая производительность системы. Лесенки по краям текстур
И так, вот моя система: -Microsoft Windows 10 Pro 10.0.17134.523 -Intel Core...

Задача про кубики и лесенки или Динамика с двумя параметрами.
Думал я думал, так и не придумал как реализовать эту задачу, даже нет идей... Родители подарили...

Рванные края или эффект "лесенки"
Такая проблема: есть изображение, нарисованное кистью, экспортирую в PNG, просматриваю и вижу вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru