Форум » Циклы и ветвления » 20-51 » Ответить

20-51

ruperson: 51) Ниже записан алгоритм. Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 2. var x, a, b, c: integer; begin readln(x); a:= 0; b:= 0; while x > 0 do begin c:= x mod 2; if c = 0 then a:= a + 1 else b:= b + 1; x:= x div 8; end; writeln(a); writeln(b); end. Не пойму, что делает программа. Мы проверяем четность последней цифра и делим на восемь? Какая-то тут связь с восмиричной системой счисления? Объясните с логической точки зрения что делает программа. Спасибо!

Ответов - 1

polyakovss: Здравствуйте! Если в десятичной форме записи числа последняя цифра является чётной (0, 2, 4, 6 или 8), то всё число также является чётным, в противном случае — нечётным. Чётному числу в десятичной форме записи соответствует чётное число в восьмеричной форме записи. Для всех систем счисления с чётным основанием (например, для восьмеричной), действует тот же признак чётности: число делится на 2, если его последняя цифра делится на 2. Поэтому рассматриваемый алгоритм находит число чётных (а) и число нечётных (b) цифр в восьмеричной форме записи введённого десятичного числа. Значит, по условию задачи нужно найти минимальное восьмеричное число, в котором 3 чётные цифры и 2 нечётные. Это число 10001 (восьмеричное). В десятичной форме записи число равно 4097.



полная версия страницы