C/C++
Решите задачу радиоактивный контейнеров с поеснением на С++
На одном из секретных заводов осуществляется обработка радиоактивных материалов, в результате которой образуются радиоактивные отходы двух типов: типа A — особо опасные и типа B — неопасные. Все отходы упаковываются в специальные прямоугольные контейнеры одинаковых размеров, после чего эти контейнеры укладываются в стопку (один над другим) для захоронения. Стопка является взрывоопасной, если в ней подряд идут более чем два контейнера с отходами типа A. Требуется написать программу, которая подсчитывает количество возможных вариантов формирования взрывоопасной стопки для заданного числа контейнеров N.
Я так думаю, что максимальное количество стопок рассчитывается как частное от деления числа N на 4.
В условиях сказано, что взрывоопасны стопки, где больше двух контейнеров A подряд. Минимальное число получается три. Между ними может быть один контейнер B. Итого 4 контейнера в минимальной взрывоопасной стопке.
#include <iostream>
int main()
{
unsigned N;
std::cin >> N;
std::cout << N / 4 << std::endl;
return 0;
}
В условиях сказано, что взрывоопасны стопки, где больше двух контейнеров A подряд. Минимальное число получается три. Между ними может быть один контейнер B. Итого 4 контейнера в минимальной взрывоопасной стопке.
#include <iostream>
int main()
{
unsigned N;
std::cin >> N;
std::cout << N / 4 << std::endl;
return 0;
}
#include < iostream >
using namespace std;
class lenta
{
public:
short length; //длина последовательности
char ab; //буква текущего блока
short height; //текущая высота
static int size; //максимальная высота
};
int lenta::size = 0;
int fuu(lenta st)
{
st.height++;
if (st.height > lenta::size) return 0; //выход за пределы
if (st.ab == 'a') st.length++; else st.length = 0;
if (st.length == 3) return pow(2, lenta::size - st.height); //при нахождении 3х А возврат оставшейся полновариантной
lenta a, b;
a = b = st;
a.ab = 'a'; b.ab = 'b';
return fuu(a) + fuu(b);
}
int main()
{
lenta a, b;
a.ab = 'a'; b.ab = 'b';
a.height = 0; b.height = 0;
a.length = 0; b.length = 0;
int h;
int varible = 0;
cin >> h;
lenta::size = h;
varible = fuu(a) + fuu(b);
cout << varible;
}
using namespace std;
class lenta
{
public:
short length; //длина последовательности
char ab; //буква текущего блока
short height; //текущая высота
static int size; //максимальная высота
};
int lenta::size = 0;
int fuu(lenta st)
{
st.height++;
if (st.height > lenta::size) return 0; //выход за пределы
if (st.ab == 'a') st.length++; else st.length = 0;
if (st.length == 3) return pow(2, lenta::size - st.height); //при нахождении 3х А возврат оставшейся полновариантной
lenta a, b;
a = b = st;
a.ab = 'a'; b.ab = 'b';
return fuu(a) + fuu(b);
}
int main()
{
lenta a, b;
a.ab = 'a'; b.ab = 'b';
a.height = 0; b.height = 0;
a.length = 0; b.length = 0;
int h;
int varible = 0;
cin >> h;
lenta::size = h;
varible = fuu(a) + fuu(b);
cout << varible;
}
Похожие вопросы
- Помогите решить задачу по программированию на C++
- Решите задачу на с++, или хотя бы скажите идею как это вообще решать пожалуйста.
- Решите задачу на любом языке, или хотя бы скажите идею как это вообще решать пожалуйста.
- Решите задачу на любом языке. Желательно на с++.
- Помогите решить задачу по C++!
- Помогите решить задачу по программированию
- Решить задачу на языке СИ
- C++ задача по контейнерам
- Помогите пожалуйста решить задачу на языке С#.
- Помогите решить задачу на c++
П. с. легко решается рекурсией.