Уисполнителя калькулятор две команды, которым присвоены номера: 1) прибавь 1; 2) умножь на 4. напишите программу, которая вычисляет, сколько существует различных программ, преобразующих число m в число n, оба числа вводятся с клавиатуры.
function f(m,n : integer): integer; begin if n = m then f := 1 else if n < m then f := 0 else if (n mod 4 = 0) and (n <> 0) then f := f(m,n-1) + f(m,n div 4) else f := f(m,n-1) end;
var m,n : integer; begin read(m,n); writeln(f(m,n)) end.
1) 1200 * 1200 dpi означает, что в квадрате размером 1 дюйм на 1 дюйм сканируется такое количество точек 2) в 1 дюйме = 2,54 см, значит в 10 см содержится 3,94 дюйма (10/2,54 = 3,94) 3) 3,94* 1200 = 4728 пикселей по ширине и по высоте экрана 4) 4728 * 4728 = 22353984 точек в цветном изображении 10 на 10 см 5) 22353984 * 24 = 536495616 бит - информационный объем изображения Переведем в большие единицы измерения: 536495616 бит / 8 = 67061952 байт / 1024 = 65490,2 Кбайт / 1024 = 64 Мбайта ответ: полученный файл будет 64 Мбайта.
Если не ошибаюсь, то X и Z являются типа byte. Требовать от переменных этого типа извлечение корня неправильно. Так как это по определению целые положительные числа, размером до 256. От переменной, из которой извлекают корень, требуется тип значения - действительное число. Так что лучше сразу объявить эти две переменные типа double (похоже так в Паскале).
В первом же случае лучше извлечь корень с операции sqrt. Снова, если не ошибаюсь, операция возведения в степени в Паскале довольно трудоемка что ли. Она определяется через exp и ln. Так что лучше не заморачиваться, а воспользоваться оператором sqrt.
function f(m,n : integer): integer;
begin
if n = m then
f := 1
else
if n < m then
f := 0
else
if (n mod 4 = 0) and (n <> 0) then
f := f(m,n-1) + f(m,n div 4)
else
f := f(m,n-1)
end;
var
m,n : integer;
begin
read(m,n);
writeln(f(m,n))
end.