ЕГЭ по информатике: Java решение 5 задания

Задания ЕГЭ по информатике можно решать на языке программирования Java. Рассмотрим решение пятого задания на нескольких примерах.

Задача 1: Обработка натурального числа

Условие: Автомат обрабатывает натуральное число n следующим образом: строится двоичная запись числа n, затем запись переворачивается (читается справа налево, ведущие нули отбрасываются), получившееся число переводится в десятичную систему счисления и выводится на экран. Найти наибольшее число, не превышающее 1000, после обработки автоматом дающее результат 23.

Решение:

Для решения задачи переберём числа от 1000 до 1, уменьшая значение на единицу на каждой итерации. Для каждого числа выполним указанные в условии преобразования:

  1. Перевод в двоичную систему: Используем метод Integer.toBinaryString(n).
  2. Переворачивание строки: Используем StringBuilder и метод reverse().
  3. Перевод из двоичной системы в десятичную: Используем метод Integer.parseInt(binary, 2).
  4. Проверка результата: Если результат равен 23, выводим исходное число n и прерываем цикл.
for (int n = 1000; n > 0; n--) {
    String binary = Integer.toBinaryString(n);
    StringBuilder sb = new StringBuilder(binary);
    String reversedBinary = sb.reverse().toString();
    int result = Integer.parseInt(reversedBinary, 2);
    if (result == 23) {
        System.out.println(n);
        break;
    }
}

Результат: 928

Задача 2: Дописывание разрядов

Условие: На вход подаётся натуральное число n. Строится двоичная запись числа. Справа дописываются два разряда: «01», если n чётное, и «10», если n нечётное. Указать минимальное число n, после обработки которого автомат получает число больше 138.

Решение:

Перебираем числа от 1 до 1000, увеличивая значение на каждой итерации. Для каждого числа:

  1. Переводим в двоичную систему.
  2. Дописываем «01» или «10» в зависимости от чётности.
  3. Переводим обратно в десятичную систему.
  4. Проверяем, больше ли результат 138. Если да, выводим исходное число n и прерываем цикл. Используем тернарный оператор для упрощения кода.
for (int n = 1; n <= 1000; n++) {
    String binary = Integer.toBinaryString(n);
    binary += (n % 2 == 0) ? "01" : "10";
    int result = Integer.parseInt(binary, 2);
    if (result > 138) {
        System.out.println(n);
        break;
    }
}

Результат: 35

Задача 3: Подсчёт единиц и дописывание разряда

Условие: Строится двоичная запись числа. Складываются все цифры двоичной записи, и остаток от деления суммы на 2 дописывается в конец числа.

Решение:

Для подсчёта единиц заменим все единицы в двоичной строке на пустую строку и найдём разницу в длинах исходной и модифицированной строк. Остаток от деления количества единиц на 2 дописываем к двоичной строке.

for (int n = 1; n <= 1000; n++) {
    String binary = Integer.toBinaryString(n);
    int count = binary.length() - binary.replace("1", "").length();
    binary += (count % 2 == 0) ? "0" : "1";
    int result = Integer.parseInt(binary, 2);
    if (result > 1008) {
        System.out.println(n);
        break;
    }
}

Результат: 120

Задача 4: Дописывание последних двух цифр или остатка

Условие: Строится двоичная запись числа. Если число n делится на 3, то дописываются две последние двоичные цифры. Если нет, то остаток от деления на 3 умножается на 3, переводится в двоичную запись и дописывается. Найти минимальное число, результат обработки которого не меньше 195.

Решение:

Для нахождения минимального числа используем алгоритм поиска минимума. Обратите внимание на обработку случая с отрицательным индексом при извлечении последних двух цифр.

int min = Integer.MAX_VALUE;
for (int n = 1; n <= 1000; n++) {
    String binary = Integer.toBinaryString(n);
    if (n % 3 == 0) {
        int len = binary.length();
        binary += binary.substring(Math.max(0, len - 2));
    } else {
        binary += Integer.toBinaryString((n % 3) * 3);
    }
    int result = Integer.parseInt(binary, 2);
    if (result >= 195) {
        min = Math.min(min, n);
    }
}
System.out.println(min);

Результат: 199

Приведенные примеры демонстрируют решение пятого задания ЕГЭ по информатике на языке Java. Использование стандартных библиотек Java позволяет эффективно обрабатывать двоичные числа и строки. Понимание алгоритмов и умение применять стандартные функции являются ключевыми для успешного решения подобных задач.

Что будем искать? Например,программа