*** КАНАЛ ЮТЬЮБ ***
ЕГЭ по информатике -> ЕГЭ 2018 -> ЕГЭ 2018 — 20
Ниже записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа: L и M.
Укажите наименьшее число x, при вводе которого алгоритм печатает сначала 5, а потом 7.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | var x, L, M: integer; begin readln(x); L := 0; M := 0; while x > 0 do begin M := M + 1; if x mod 2 <> 0 then L := L + 1; x := x div 2; end; writeln(L); writeln(M); end. |
📹 Видеоразбор 1
📹 Видеоразбор 2
-
Рассмотрим алгоритм:
- Наличие операторов
x mod 2
иx div 2
говорит о том, что эту задачу можно решать, представляя x в двоичной системе счисления. - В цикле есть счетчик M, который увеличивается на единицу и в конце программы будет соответствовать количеству итераций цикла. Таким образом, имеем 7 проходов.
- Условие
if x mod 2 <> 0
проверяет на нечетность младший разряд числа в двоичной системе:
В цикле:
например, если было D = 510 = 1012,
то if x mod 2 <> 0
проверяет if 1 <> 0
x := x div 2;
отсекается младший разряд двоичного представления значения x, т.е.:если было, например, D = 510 = 1012, то стало D = 102
10011112 = 64 + 8 + 4 + 2 + 1 = 7910
✎ Способ 2 (длительный, аналитический):
- В начале программы вводится
x
, и обнуляются две переменные —L
иM
. - Далее следует цикл, который зависит от переменной x: пока
x > 0
выполняется тело цикла. - В теле цикла каждый его шаг происходит увеличение переменной M на единицу. Т.е. переменная M — это счетчик, соответственно, его значение по завершению работы цикла будет соответствовать количеству шагов (итераций) цикла.
- В конце программы печатается сначала L, потом M. Т.е. L должно быть равно 5, а M = 7. Раз M будет равно 7, то из предыдущего пункта видим, что цикл имеет 7 шагов, т.е. 7 итераций.
- L — это тоже счетчик, но из условия
if x mod 2 <> 0
видим, что счетчик L подсчитывает количество нечетных промежуточных x. Т.е. x в цикле постоянно меняется, а L проверяет x и в случае нечетного значения увеличивается на единицу. В программе L должно стать 5. - В цикле x делится целочисленно на 2:
x := x div 2
- Поскольку цикл завершит работу, когда x = 0, то последним шагом будет
x = 1 div 2 = 0
. Т.е. в предпоследнем шаге x = 1. - Решим данную задачу с конца, проследив все итерации цикла. Получается, что из предыдущего шага в следующий шаг x изменяется по двум правилам, назовем их командами:
Для начала рассмотрим алгоритм программы:
1. x*2 -> если предыдущий x - четный, например 4 div 2 - обратное действие 2*2 = 4 2. x*2+1 -> если предыдущий x - нечетный, например 5 div 2 - обратное действие 2*2+1 = 5
Результат: 79
Ниже записан алгоритм. Получив на вход число x, этот алгоритм печатает число: S. Известно, что 100 <= x <=200.
Укажите наибольшее допустимое число x, при вводе которого алгоритм печатает 42.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | var x, A, B, D, S: integer; begin readln(x); B := x; A := 10; D := x; S := 0; while (D div 2) > 0 do begin if (D mod 2) = 1 then s := s + 1 else s := s + A; D := D div 2; end; writeln(s); end. |
-
Для начала рассмотрим алгоритм программы:
- В начале программы вводится x, две переменные — B и D присваивают значение введенного x. Переменной A присваивается значение 10, а переменная S обнуляется.
- Далее следует цикл, который зависит от переменной D (равной x): пока
x div 2 > 0
выполняется тело цикла. Т.е. пока x, деленный целочисленно на 2, больше нуля. - В теле цикла происходит увеличение переменной S либо на 10 (
А:=10
), либо на 1 в зависимости от четности значения D. Т.е. переменная S увеличивается на 10 в случае, если очередное значение D — нечетное и увеличивается на 1, если очередное значение D — четное. - В конце цикла D целочисленно делится на 2 (
D := D div 2
). - По условию программы S должно быть равно 42. Посчитаем максимальное количество итераций цикла:
2n <= 200, т.е. n = 7 (максимальное значение D - 200 - делим целочисленно на 2, пока это возможно). 2n >=100, т.е. n = 6 минимальное количество итераций - 6
42 = 10 + 10 + 10 + 12*1 (получаем 15 итераций, что не соответствует действительности) 42 = 10 + 10 + 10 + 10 + 2*1 получаем 6 итераций - подходит!
s = s + 1
) и 4 итерации с D — четным (когда s = s + 10
)11100002 = 11210 первая единица будет стоять всегда, она не участвует в итерациях цикла Проверка: 112| 0 - соответствует s + 10 56| 0 - соответствует s + 10 28| 0 - соответствует s + 10 14| 0 - соответствует s + 10 7| 1 - соответствует s + 1 3| 1 - соответствует s + 1 1|
Результат: 112
Ниже записан алгоритм. Получив на вход число x, этот алгоритм печатает число S. Известно, что 100 <= x <=200.
Укажите наименьшее допустимое число x, при вводе которого алгоритм печатает 57.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | var x, A, B, D, S: integer; begin readln(x); B := x; A := 11; D := x; S := 0; while (D div 2) > 0 do begin if (D mod 2) = 1 then s := s + 1 else s := s + A; D := D div 2; end; writeln(s); end. |
-
Для начала рассмотрим алгоритм программы:
- В начале программы вводится x, две переменные — B и D присваивают значение введенного x. Переменной A присваивается значение 11, а переменная S обнуляется.
- Далее следует цикл, который зависит от переменной D (равной x): пока
x div 2 > 0
выполняется тело цикла. - В теле цикла происходит увеличение переменной S либо на 11 (т.к.
А:=11
), либо на 1 в зависимости от четности значения D. Т.е. переменная S увеличивается на 11 в случае, если очередное значение D — нечетное и увеличивается на 1, если очередное значение D — четное. - В конце цикла D целочисленно делится на 2 (
D := D div 2
). - По условию программы S должно быть равно 57. Посчитаем максимальное количество итераций цикла:
2n <= 200, т.е. n = 7 (максимальное значение D - 200 - делим целочисленно на 2, пока это возможно). 2n >=100, т.е. n = 6 минимальное количество итераций -> 6
57 = 11 + 11 + 11 + 11 + 11 + 1 + 1 (получаем 7 итераций)
2 итерации с D - нечетным (когдаs = s + 1
) 5 итераций с D - четным (когдаs = s + 11
)
100000112 = 13110 первая единица будет стоять всегда, она не участвует в итерациях цикла Проверим: 131| 1 - соответствует s + 1 65| 1 - соответствует s + 1 32| 0 - соответствует s + 11 16| 0 - соответствует s + 11 8| 0 - соответствует s + 11 4| 0 - соответствует s + 11 2| 0 - соответствует s + 11 1|
Результат: 131
Ниже записан алгоритм. Получив на вход число x, этот алгоритм печатает два числа: L и M.
Укажите наименьшее из таких чисел x, при вводе которых алгоритм печатает сначала 4, а потом 8.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | var x, L, M: integer; begin readln(x); L := 0; M := 0; while x > 0 do begin M := M + 1; If x mod 2 <> 0 then begin L:= L + 1; End; x := x div 2; end; writeln(L); writeln(M); end. |
Результат: 135
ЕГЭ по информатике -> ЕГЭ 2018 -> ЕГЭ 2018 — 20