Имя: Пароль:
IT
 
Комбинаторика. Сколькими способами можно пройти лестницу?
0 GANR
 
02.07.12
12:13
Найти количество способов прохождения 30-ступенчатой лестницы, если можно шагать
- на следующую ступеньку
- через 1 ступеньку
- через 2 ступеньки
1 Ненавижу 1С
 
гуру
02.07.12
12:15
Пусть P(N) - число способов прохода N-ступенчатой лестницы
Тогда P(N) = P(N-1)+P(N-2)+P(N-3)
P(1)=1
P(2)=2
P(3)=4
2 Противный
 
02.07.12
12:15
два впеед, один назад... учитывать?
3 Eugene_life
 
02.07.12
12:16
(0) Бери цикл от 0 до 30, не ошибешься
4 Противный
 
02.07.12
12:16
вперед...
5 GANR
 
02.07.12
12:18
Только вперёд(2)
6 Ненавижу 1С
 
гуру
02.07.12
12:55
7 GANR
 
02.07.12
14:46
ап
8 aleks-id
 
02.07.12
14:47
30 в кубе не?
9 Ненавижу 1С
 
гуру
02.07.12
14:48
(7) че ап? че тебе еще рассказать то?
10 Ненавижу 1С
 
гуру
02.07.12
14:49
Excel говорит 53798080
11 GANR
 
02.07.12
14:51
(9) Верно. Хорошо-бы ход решения до косточки развинтить.
12 acsent
 
02.07.12
14:52
1. вычисляем кол-во ступенек которые можно пропустить.
Всего вариантов - сумма всех сочетаний без повторов из колва ступенек по количество пропусков
13 acsent
 
02.07.12
14:53
3. вычесть пропуски стоящие рядом
14 Ненавижу 1С
 
гуру
02.07.12
14:53
(11) нудятина, анализируем последний ход и обнаруживаем рекурсию
15 Vakhrin
 
02.07.12
14:54
3 способа:
- на следующую ступеньку
- через 1 ступеньку
- через 2 ступеньки
16 Vladal
 
02.07.12
15:00
(15) Ну а если первую - на одну, потом - через одну, потом следующую, потом - через две...
17 Deni7
 
02.07.12
15:04
(9) Тут видимо надо решение в замкнутой форме.
18 Vladal
 
02.07.12
15:04
Имеем количество вариантов, как можно выразить сумму 30 из чисел 1, 2 и 3.
19 Deni7
 
02.07.12
15:06
1С:Ркурсия

Процедура КнопкаВыполнитьНажатие(Кнопка)
   Для А = 1 По 30 Цикл
       Ф = Расчет(А);
       Сообщить(""+А+" "+Ф);
       ОбработкаПрерыванияПользователя();
   КонецЦикла;
КонецПроцедуры

Функция Расчет(х)
   Если х = 1 Тогда
       Возврат 1;
   ИначеЕсли х = 2 Тогда
       Возврат 2;
   ИначеЕсли х = 3 Тогда
       Возврат 4;
       
   Иначе Возврат Расчет(х-1)+Расчет(х-2)+Расчет(х-3);
   КонецЕсли;
КонецФункции
20 GANR
 
02.07.12
15:08
Хорошо. Не перевелись среди 1С-чиков математики. :-)
21 чувак
 
02.07.12
15:20
(20) Не только математика. Тут есть все.
В соседней ветке обсуждают принципы взаимодействия кварково-глюконного взаимодествия через призму системы мультивселенная-омниверс.
22 Михаил Козлов
 
02.07.12
20:24
(14) Если искать решение реккурентного уравнения в виде P(N) = p^N (как это обычно и делают), то для p получается уравнение: p^3-p^2-p-1 = 0. К сожалению, по формуле Кардана получается громоздкое выражение. Численное значение "главного" члена, примерно, 1,84 - растет чуть медленнее степени двойки.
23 GANR
 
02.07.12
23:53
(22) С удовольствием попробую обобщить задачу и вывести что-то свое. Нельзя в математике мыслить формулами - чтобы в ней что-то открыть надо мыслить образами.
24 GANR
 
04.07.12
13:53
Выражение MathML {\sf C}_n^k={\sf C}_{n-1}^k+{\sf C}_{n-1}^{k-1}.
25 GANR
 
07.07.12
13:21
НЕ рациональное решение с просмотром промежуточных результатов:

&НаКлиенте
Процедура ПереборСочетанийШагов(ВсегоСтупеней = 30)
   
   ШагиПо3 = 0;
   
   Счетчик = 0;
   Итого = 0;
   
   Пока ШагиПо3 * 3 <= 30 Цикл
       
       ШагиПо2 = 0;
       
       Пока ШагиПо3 * 3 + ШагиПо2 * 2 <= 30 Цикл
           
           ШагиПо1 = ВсегоСтупеней - (ШагиПо3 * 3 + ШагиПо2 * 2);
           Счетчик = Счетчик + 1;
           
           ЧислоШаговПо2По3 = ШагиПо2 + ШагиПо3;
           ЧислоСочетанийШаговПо2По3 = C(ЧислоШаговПо2По3, ШагиПо2);
           
           ЧислоШаговПо1По2По3 = ШагиПо1 + ШагиПо2 + ШагиПо3;
           ЧислоСочетанийШаговПо1 = C(ЧислоШаговПо1По2По3, ЧислоШаговПо2По3);
           
           ВсегоСочетаний123 = ЧислоСочетанийШаговПо1 * ЧислоСочетанийШаговПо2По3;
           
           Итого = Итого + ВсегоСочетаний123;
           
           Сообщить("" + Счетчик + ") Шагов по 3 - " + ШагиПо3 + ", по 2 - " + ШагиПо2 + ", по 1 - " + ШагиПо1 + ", перестановок - " + ВсегоСочетаний123);
                                             
           ШагиПо2 = ШагиПо2 + 1;
                       
       КонецЦикла;
       
       ШагиПо3 = ШагиПо3 + 1;
       
   КонецЦикла;    
   
   Сообщить("
   |Лестницу можно пройти " + Итого + " способами");
   
КонецПроцедуры

// функция подсчета сочетаний элементов
// из N по k
&НаКлиенте
Функция C(N, k)
   
   Если N < k или k < 0 или N < 0 Тогда
       Возврат 0
   КонецЕсли;    
   
   Comb = 1;
   Для i = 1 По k Цикл
       Comb = Цел(Comb * (N - k + i) / i)
   КонецЦикла;
   
   Возврат Comb
   
КонецФункции

Ответ: Лестницу можно пройти 53798080 способами (такой-же, как и в (10))
26 sda553
 
07.07.12
13:39
wiki:Числа_трибоначчи
эта задача в своем общем случае не так то проста
27 GANR
 
07.07.12
13:46
Представить её в уме, не глядя на стандартизированные алгоритмы, весьма непросто.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.