Запись некоторого натурального числа X в шестнадцатеричной системе счисления имеет ровно...

0 голосов
82 просмотров
Запись
некоторого натурального числа X в шестнадцатеричной системе счисления имеет
ровно три значащих разряда. Это число увеличили в два раза, и оказалось, что
запись получившегося числа Y в шестнадцатеричной системе также имеет ровно три
значащих разряда, причем сумма цифр шестнадцатеричной записи исходного числа X
равна сумме цифр шестнадцатеричной записи полученного числа Y. Сколько
существует таких чисел X, которые удовлетворяют указанным условиям и при этом
содержат хотя бы одну цифру 2 в своей шестнадцатеричной записи? В ответе
укажите целое число.
Нужно составить программу, которая автоматически переберет все числа от 100 до FFF

Информатика (25 баллов) | 82 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Последнее проверяемое число 7FF, поскольку большее число при удвоении будет четырехзначным, нарушая условие задания.

procedure Analyze(n: integer; var sd: integer; var has2: boolean);
{Для заданного целого n возвращает:
  sd - сумму цифр в шестнадцатиричном представлении;
  has2 - true, если среди шестнадцитиричных цифр имеется хотя бы одна двойка.}
const
  mask = $00F;

var
  i, r: integer;

begin
  has2 := false;
  sd := 0;
  for i := 1 to 3 do
  begin
    r := (n and mask);
    has2 := (has2 or (r = 2));
    sd := sd + r;
    n := (n shr 4);
  end
end;

function IsSuitable(n: integer): Boolean;
{Проверяет, удовлетворяет ли число n набору условий}

var
  s1, s2: integer;
  has2, stub: boolean;

begin
  Analyze(n, s1, has2);
  Analyze(2 * n, s2, stub);
  IsSuitable := ((s1 = s2) and has2)
end;


var
  i, n: integer;

begin
  n := 0;
  for i := $100 to $7FF do
    if IsSuitable(i) then n := n + 1;
  Writeln('Найдено чисел- ', n)
end.

Результат выполнения программы:
Найдено чисел- 23


(142k баллов)