Вывести все десятичные числа A(где А больше 100, но меньше 500), в двоичной записи которых число единиц превосходит число нулей. Написать алгоритм программы и решить задачу.
Сначала задача должна быть решена геометрически. Очевидно, что круг войдет в прямоугольник если его диаметр D будет меньше, чем меньшая из сторон этого прямоугольника min(a,b). Вот и все решение.
По этому решению составляем алгоритм: 1. Ввести a, b, D 2. Найти m - минимум (a,b) 3. Если D<m, то вывести сообщение "Войдет", иначе вывести сообщение "Не войдет". 4. Завершить работу.
Осталось написать программу.
1. Современное решение
// PascalABC.NET 3.3, сборка 1611 от 06.01.2018 // Внимание! Если программа не работает, обновите версию!
begin var (a,b,d):=ReadReal3('Введите через пробел a,b,D:'); var m:=Min(a,b); if D<m then Writeln('Войдет') else Writeln('Не войдет') end.
Пример Введите через пробел a,b,D: 14.5 11 10.6 Войдет
2. "Школьный" вариант - так писали наши отцы и деды
var a,b,D,m:real;
begin Write('Введите через пробел a,b,D: '); Read(a,b,d); if a<b then m:=a else m:=b; if D<m then Writeln('Войдет') else Writeln('Не войдет') end.
где n - степень; R - результат в третичной системе; K - кол-во двоек в R;
Из утверждения [1] и на основе полученных выше результатах видно, что слагаемое 9^(n+m) при m >= 1 на кол-во двоек в результате R никогда влиять не будет, поэтому его можно опустить. (т.е. в нашем случае 9^33 отбрасываем)
Также в полученых выше результатах на основе анализа зависимости K от n для 9^n - 18 выводится следущая формула: [2] K(n) = (n - 1) * 2 - 1
Подставляя число 22 в формулу [2], получаем: K(22) = (22 - 1) * 2 - 1 = 41;
ответ: в выражении 9^22 + 3^66 – 18 в третичной системе будет содержаться 41 двойка.
По этому решению составляем алгоритм:
1. Ввести a, b, D
2. Найти m - минимум (a,b)
3. Если D<m, то вывести сообщение "Войдет", иначе вывести сообщение "Не войдет".
4. Завершить работу.
Осталось написать программу.
1. Современное решение
// PascalABC.NET 3.3, сборка 1611 от 06.01.2018
// Внимание! Если программа не работает, обновите версию!
begin
var (a,b,d):=ReadReal3('Введите через пробел a,b,D:');
var m:=Min(a,b);
if D<m then Writeln('Войдет')
else Writeln('Не войдет')
end.
Пример
Введите через пробел a,b,D: 14.5 11 10.6
Войдет
2. "Школьный" вариант - так писали наши отцы и деды
var
a,b,D,m:real;
begin
Write('Введите через пробел a,b,D: ');
Read(a,b,d);
if a<b then m:=a
else m:=b;
if D<m then Writeln('Войдет')
else Writeln('Не войдет')
end.
9^22 + 3^66 – 18 = 9^22 + 9^(66/2) – 18 = 9^33 + 9^22 - 18
Далее переведём некоторые числа в третичную систему:
9-10 = 100-3
18-10 = 200-3
[1] Заметим, что число 9^n при n > 0 является круглым в третичной системе и двойки в нём содержаться не будет.
Рассмотрим выражение: 9^(n+m) + 9^n - 18
Вычислим это выражение для m=1 и n от 2 до 8, получится следующее:
n=2: K=1 : R=1002100
n=3: K=3 : R=100222100
n=4: K=5 : R=10022222100
n=5: K=7 : R=1002222222100
n=6: K=9 : R=100222222222100
n=7: K=11 : R=10022222222222100
n=8: K=13 : R=1002222222222222100
где n - степень; R - результат в третичной системе; K - кол-во двоек в R;
Из утверждения [1] и на основе полученных выше результатах видно, что слагаемое 9^(n+m) при m >= 1 на кол-во двоек в результате R никогда влиять не будет, поэтому его можно опустить.
(т.е. в нашем случае 9^33 отбрасываем)
Также в полученых выше результатах на основе анализа зависимости K от n для 9^n - 18 выводится следущая формула:
[2] K(n) = (n - 1) * 2 - 1
Подставляя число 22 в формулу [2], получаем: K(22) = (22 - 1) * 2 - 1 = 41;
ответ: в выражении 9^22 + 3^66 – 18 в третичной системе будет содержаться 41 двойка.