*** КАНАЛ ЮТЬЮБ ***
 
ЕГЭ по информатике -> ЕГЭ 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
 
