Python. Ханойские башни с ограничениями.
Несправедливые башни
В Ханое несправедливо запретили класть самый маленький диск (номер 1) на средний колышек (номер 2).
Решите головоломку с учётом этих ограничений. Вам не нужно находить минимальное решение, но количество совершённых перемещений не должно быть больше 200000 при условии, что количество дисков не превосходит 10.
Входные данные
Задано натуральное число n≤10 — размер пирамидки.
Выходные данные
Программа должна вывести перекладывания пирамидки из данного числа дисков со стержня 1 на стержень 3.
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <algorithm>
using namespace std;
bool myfunction (int i,int j) { return (i<j); } // comparator
int main() {
setlocale(0, "");
srand(time(0));
float u(0.0f), v(0.0f), w(0.0f); //суточный рацион коровы, состоящий из сена, силоса и комбикорма
float k(0.0f); // колво голов в ъозяйстве
float s(0.0f), t(0.0f), f(0.0f); // сколько осталось сена, силоса и комбикорма
float percP(0.0f); // в день погибает % коров
float percQ(0.0f), percR(0.0f), percT(0.0f); // в день сгнивает сена, силоса и комбкорма %
int dayCounter = 0;
cout << "Сена в день: ";
cin >> u;
cout << "Силоса в день: ";
cin >> v;
cout << "Комбикорма в день: : ";
cin >> w;
cout << "Всего коров: ";
cin >> k;
cout << "Осталось сена: ";
cin >> s;
cout << "Осталось силоса: ";
cin >> t;
cout << "Осталось комбикорма: ";
cin >> f;
cout << "Сколько % в день погибает коров: ";
cin >> percP;
cout << "Сколько % пропадает сена: ";
cin >> percQ;
cout << "Сколько % пропадает силоса: ";
cin >> percR;
cout << "Сколько % пропадает комбикорма: ";
cin >> percT;
while(1) {
if(s<u) {
cout << "Кончилось сено. Прожито дней: " << dayCounter << ". Осталось коров: " << k;
break;
}
if(t<v) {
cout << "Кончился силос. Прожито дней: " << dayCounter << ". Осталось коров: " << k;
break;
}
if(f<w) {
cout << "Кончился комбикорм. Прожито дней: " << dayCounter << ". Осталось коров: " << k;
break;
}
cout << "День:: " << dayCounter << " ";
cout << "Осталось коров: " << static_cast<int>(k) << endl;
// кормим коров
s-=u;
t-=v;
f-=w;
//конец дня. Заного считаем припасы и коров.
k=k/100*(100-percP);
s=s/100*(100-percQ);
t=t/100*(100-percR);
f=f/100*(100-percT);
++dayCounter;
}
system("pause");
}
По условию текст написан в КОИ-8, где 1 символ весит 8 бит.
Всего тест занимает 8 Кбайт
Переведем 8 Кбайт в биты: 8 Кбайт = 65536 бит
Текст занимает 8 Кбайт или 65536 бит
Теперь узнаем количество символов в тексте: разделим 65536 бит на 8 бит, так как 1 символ = 8 бит: 65536 бит : 8 бит = 8192
В тексте всего 8192 символа.
По условию страница содержит 32 строки по 40 символов, всего символов содержит: 32 * 40 = 1280. (1 страница может вместить 1280 символов)
Теперь найдем количество необходимых листов для записи нашего текста: 8192 / 1280 = 6,4 листа.
Так как наш текст не поместится на 6 листах, то возьмем еще 1 лист и,в итоге, получим 7 листов
ответ: 7 листов