Задание EGEINF31077A: Преобразование записи числа

ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий

Открыть решение ↓ Ошибка или пожелание

Тип задачи: Преобразование записи числа.

Учебные темы: Определение возможных результатов работы простейших алгоритмов управления исполнителями и вычислительных алгоритмов. Определение исходных данных, при которых алгоритм может дать требуемый результат.

Дайте развернутый ответ.

Требовалось написать программу, которая получает на вход натуральное число N, не превосходящее 109, и выводит число, равное количеству цифр 2 в десятичной записи числа N. Программист написал программу неправильно. Ниже написанная им программа для Вашего удобства приведена на пяти языках программирования.

 

Бейсик

Python

DIM N AS LONG

DIM R, d AS INTEGER

INPUT N

R = 0

WHILE N > 0

  d = N MOD 10

  IF d <> 2 THEN

    R = R + 1

  END IF

  N = N \ 10

WEND

PRINT d

END

N = int(input())

R = 0

while N > 0:

    d = N % 10

    if d != 2:

       R = R + 1

    N = N // 10

print(d)

Алгоритмический язык

Паскаль

алг

нач

  цел N, R, d

  ввод N

  R := 0

  нц пока N > 0

    d := mod(N, 10)

    если d <> 2 то

      R := R + 1

    все

    N := div(N, 10)

  кц

  вывод d

кон

var N: longint;

  R, d: integer;

begin

  readln(N);

  R := 0;

  while N > 0 do begin

    d := N mod 10;

    if d <> 2 then

      R := R + 1;

    N := N div 10;

  end;

  writeln(d);

end.

С++

#include <iostream>

using namespace std;

 

int main()

{

  long int N;

  int R, d;

  cin >> N;

  R = 0;

  while (N > 0) {

    d = N % 10;

    if (d != 2) {

      R = R + 1;

    }

    N = N / 10;

  }

  cout << d << endl;

  return 0;

}

 

Последовательно выполните следующее.

1. Напишите, что выведет эта программа при вводе числа 324.

2. Приведите пример входного числа N, при котором приведённая программа, несмотря на ошибки, выдаёт верный ответ.

3. Найдите допущенные программистом ошибки и исправьте их. Исправление ошибки должно затрагивать только строку, в которой находится ошибка. Для каждой ошибки:

1) выпишите строку, в которой сделана ошибка;

2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.

Известно, что в тексте программы нужно исправить не более двух строк так, чтобы она стала работать правильно.

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

Обратите внимание на то, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения.

 


 

i
СВОЙСТВА ЗАДАНИЯ
КЭС:
3.2 Оценка сложности вычислений. Время работы и объём используемой памяти, их зависимость от размера исходных данных. Оценка асимптотической сложности алгоритмов. Алгоритмы полиномиальной сложности. Переборные алгоритмы. Примеры различных алгоритмов решения одной задачи, которые имеют различную сложность
3.6 Язык программирования (Паскаль, Python, Java, C++, C#). Типы данных: целочисленные, вещественные, символьные, логические. Ветвления. Сложные условия. Циклы с условием. Циклы по переменной. Обработка данных, хранящихся в файлах. Текстовые и двоичные файлы. Файловые переменные (файловые указатели). Чтение из файла. Запись в файл. Разбиение задачи на подзадачи. Подпрограммы (процедуры и функции). Использование стандартной библиотеки языка программирования
Тип ответа:Развернутый ответ
Номер: 31077A
НЕ РЕШЕНО Изменить статус

Решение задания EGEINF31077A

Ответ: 1) 3; 2) N = 12; 3) if d == 2: и print(R)

Нужно подсчитать количество цифр 2 в десятичной записи натурального N ≤ 10⁹. Рассмотрим исходную программу на Python. В начале R = 0. На каждом шаге d получает последнюю цифру, затем последняя цифра N отбрасывается. Условие проверяется до перехода к следующей цифре.

1. Работа исходной ошибочной программы при N = 324.
N = 324: d = 4; условие d != 2 истинно, R = 0 + 1 = 1. Далее N = 32.
N = 32: d = 2; условие ложно, R остаётся 1. Далее N = 3.
N = 3: d = 3; условие истинно, R = 1 + 1 = 2. Далее N = 0.
После завершения цикла d равно 3. Команда print(d) выводит 3, а не накопленное значение R.

2. Подходящий пример: N = 12.
Последовательно обрабатываются цифры 2 и 1. После цикла d = 1, поэтому программа печатает 1. В числе 12 действительно одна двойка. Значение R в этом примере тоже равно 1, но исходная команда печатает именно d.

3. Исправляем ровно две ошибочные строки на Python, сохраняя остальные строки и их отступы.
Первая ошибочная строка: if d != 2:
Правильная строка: if d == 2:
Вторая ошибочная строка: print(d)
Правильная строка: print(R)
Печатать нужно итоговый счётчик, а не последнюю извлечённую цифру.

Проверка исправления. После обработки любых k последних цифр значение R равно количеству цифр 2 среди них. Вначале обработано ноль цифр и R = 0. На следующем шаге счётчик увеличивается ровно на 1 тогда и только тогда, когда очередная цифра равна 2; значит, утверждение сохраняется. После удаления всех цифр N становится 0, цикл завершается, и выводится количество нужных цифр во всём исходном числе. При N ≤ 10⁹ выполняется не более десяти итераций.
Для исходного теста 324 исправленная программа печатает 1. Для N = 222 она печатает 3, а для N = 10⁹ — 0. Пример из пункта 2 сохраняет верный результат 1.

Ответ: 1) 3; 2) N = 12; 3) if d == 2: и print(R).

Помочь улучшить сайт

Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINF31077A.

Сообщение увидит только команда сайта: на странице оно не публикуется.

Комментарии к решению

Комментарии видны всем посетителям сайта.

Комментариев пока нет. Будьте первым.

Чтобы оставить комментарий, войдите или зарегистрируйтесь.