Olga-Lev1160
?>

Мне нужно перевести этот пример на с++ в программу, чтобы она решила это..кто сделает от

Информатика

Ответы

lzelenyi5
Последнее проверяемое число 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
Galkin683
N = X1*256 + Y1*16 + Z1
2N = X2*256 + Y2*16 + Z2
X1 + Y1 + Z1 = X2 + Y2 + Z2

Во-первых, X1 < 8, иначе число 2N в 16-ной записи станет 4-значным.
Можно написать такую программу поиска этих чисел
Начало
k = 0 ' Это счетчик чисел, которые мы ищем
Цикл по X1 от 1 до 7
    Цикл по Y1 от 0 до 15
        Цикл по Z1 от 0 до 15
            N = X1*256 + Y1*16 + Z1
            M = 2*N
            X2 = Int (M / 256)
            Y2 = Int ((M - X2*256) / 16)
            Z2 = M Mod 16
            Если (X1+Y1+Z1 = X2+Y2+Z2) And ((X1 = 2) Or (Y1 = 2) Or (Z1 = 2), То
                k = k + 1
            Конец Если
        Конец цикла по Z1
    Конец цикла по Y1
Конец цикла по X1
Вывод k
Конец

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Мне нужно перевести этот пример на с++ в программу, чтобы она решила это..кто сделает от
Ваше имя (никнейм)*
Email*
Комментарий*