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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2016, 16:08   #1
Евгений1415
 
Регистрация: 28.01.2016
Сообщений: 3
По умолчанию взрывоопасность

помогите решить на питоне или паскале
При переработке радиоактивных материалов образуются отходы трех видов — особо опасные (тип A), неопасные (тип B) и совсем не опасные (тип C). Для их хранения используются одинаковые контейнеры. После помещения отходов в контейнеры последние укладываются вертикальной стопкой. Стопка считается взрывоопасной, если в ней подряд идет более одного контейнера типа A. Стопка считается безопасной, если она не является взрывоопасной. Для заданного количества контейнеров N определить число безопасных стопок.

Входные данные
Одно число 1N20.

Выходные данные
Одно число — количество безопасных вариантов формирования стопки.

Примечание
В примере из условия среди стопок длины 2 бывают безопасные стопки типов AB, AC, BA, BB, BC, CA, CB и CC. Стопки типа AA являются взрывоопасными.

Примеры
входные данные
2
выходные данные
8
Евгений1415 вне форума Ответить с цитированием
Старый 01.02.2016, 14:41   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Нужно посчитать для всех i = 1..n и сложить
Считается простой динамикой
Poma][a вне форума Ответить с цитированием
Старый 01.02.2016, 14:46   #3
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Меняли бы вы, Евгений, работу, пока не рвануло )
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 01.02.2016, 15:02   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Формулой можно просто посчитать

Всего вариантов: 3^N
Из них опасных: 3^(N-2) + 2*(N-2)*3^(N-3)
Разница между ними - безопасные

PS - если не напутал в формуле
Цитата:
Меняли бы вы, Евгений, работу, пока не рвануло
Ему до работы еще ого-го. Наверно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.02.2016, 15:51   #5
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Код:
var    KolV,Kol:longint;
begin
repeat
writeln('количество контейнеров ');
ReadLn(Kol);
until (Kol>1) and (Kol<21);
if Kol <> 1 then
begin  
 KolV:=trunc(exp(ln(3)*Kol));
 WriteLn;
 WriteLn('количество безопасных вариантов');
 WriteLn(KolV-(sqr(Kol-1)+(kol-2)));
end 
 else
  begin
   WriteLn('количество безопасных вариантов');
   WriteLn('3');
  end;
 readln;
end.
писал на коленке не проверял. не уверен хватит ли диапазона longInt
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 01.02.2016, 15:59   #6
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Формулой можно просто посчитать

Всего вариантов: 3^N
Из них опасных: 3^(N-2) + 2*(N-2)*3^(N-3)
Разница между ними - безопасные

PS - если не напутал в формуле Ему до работы еще ого-го. Наверно
у меня в голове почему то такая формула всплыла:
(n-1)^(x-1)+(n-2)^(x-2)
где n - длинна строки а x - мощность алфавита.
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 01.02.2016, 16:05   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

У меня не всплывала, на основании этого:
N=2 -> 1
N=3 -> 3 + 2
N=4 -> 3^2 + 2*3 + 3*2
N=5 -> 3^3 + 2*3^2 + 3*2*3 + 3^2*2
N=6 -> 3^4 + 2*3^3 + 3*2*3^2 + 3^2*2*3 + 3^3*2
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.02.2016, 16:38   #8
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
У меня не всплывала, на основании этого:
N=2 -> 1
N=3 -> 3 + 2
N=4 -> 3^2 + 2*3 + 3*2
N=5 -> 3^3 + 2*3^2 + 3*2*3 + 3^2*2
N=6 -> 3^4 + 2*3^3 + 3*2*3^2 + 3^2*2*3 + 3^3*2
блин, точно.
тогда будет так
Код:
function koren(Pod,Nad:integer):integer;
begin
koren:=trunc(exp(ln(Pod)*Nad));
end;

var    kolOpV,KolV,Kol:longint;
begin
repeat
writeln('количество контенеров ');
ReadLn(Kol);
until (Kol>1) and (Kol<21);
if Kol <> 1 then
begin  
 KolV:=koren(3,kol);
 WriteLn;
 WriteLn('количество безопасных вариантов');
 kolOpV:=koren(3,Kol-2)+ 2*(Kol-2)*koren(3,Kol-3);
 WriteLn(KolV-kolOpV);
end 
 else
  begin
   WriteLn('количество безопасных вариантов');
   WriteLn('3');
  end;
 readln;
end.
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 01.02.2016, 18:18   #9
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Ну эт ж скучно.. А можно возведением матрицы в степень сделать
Poma][a вне форума Ответить с цитированием
Старый 01.02.2016, 18:54   #10
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Ну эт ж скучно.. А можно возведением матрицы в степень сделать
Poma][aсделайте)
или вы написали, чтоб озадачить тех кому заняться нечем?))
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Ответ


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