Программное решение задач ЕГЭ по информатике

Задача 5918. Источник: Поляков. Задание КИМ 14

Страница задачи 5918

(М. Ишимов) Операнды арифметического выражения записаны в системе счисления с основанием 16:

8569x16 + 12x4816

В записи чисел переменной x обозначена неизвестная цифра из алфавита 16-ричной системы счисления. Определите наибольшее значение x, при котором у значения данного арифметического выражения, записанного в 8-ричной системе счисления, встречается не более двух чётных цифр. Для найденного значения x запишите значение выражения в восьмеричной системе счисления. Основание системы счисления указывать не нужно.

Решение

Python

result = ""
for x in range(16):
    n1 = 8 * 16 ** 4 + 5 * 16 ** 3 + 6 * 16 ** 2 + 9 * 16 + x
    n2 = 16 ** 4 + 2 * 16 ** 3 + x * 16 ** 2 + 4 * 16 + 8
    n = n1 + n2
    k = 0
    s = ""
    while n > 0:
        if n % 2 == 0:
            k += 1
        s = str(n % 8) + s
        n //= 8
    if k <= 2:
        result = s
print(result)

PascalABC

var
    x, n, n1, n2, k: Integer;
    res, s: String;
begin
    for x := 0 to 15 do
    begin
        n1 := 8 * 16 * 16 * 16 * 16 + 5 * 16 * 16 * 16 + 6 * 16 * 16 + 9 * 16 + x;
        n2 := 16 * 16 * 16 * 16 + 2 * 16 * 16 * 16 + x * 16 * 16 + 4 * 16 + 8;
        n := n1 + n2;
        s := '';
        k := 0;
        while n > 0 do
        begin
            if n mod 2 = 0 then
                k := k + 1;
            s := chr(n mod 8 + 48) + s;
            n := n div 8;
        end;
        if k <= 2 then
            res := s;
    end;
    Writeln(res);
end.

C++

#include <iostream>
using namespace std;
int main()
{
    string res = "";
    for (int x = 0; x < 16; x++)
    {
        int n1 = 8 * 16 * 16 * 16 * 16 + 5 * 16 * 16 * 16 + 6 * 16 * 16 + 9 * 16 + x;
        int n2 = 16 * 16 * 16 * 16 + 2 * 16 * 16 * 16 + x * 16 * 16 + 4 * 16 + 8;
        int n = n1 + n2;
        string s = "";
        int k = 0;
        while (n > 0)
        {
            if (n % 2 == 0)
                k++;
            s = (char)(n % 8 + 48) + s;
            n /= 8;
        }
        if (k == 2)
            res = s;
    }
    cout << res << endl;
}

Ответ

2275735

Отправить замечание по решению

Код по которому имеется замечание:

Ваш вариант кода:

Комментарий: