Инфоурок / Информатика / Конспекты / Егэ 11 класс информатика с пояснением 2016
Обращаем Ваше внимание: Министерство образования и науки рекомендует в 2017/2018 учебном году включать в программы воспитания и социализации образовательные события, приуроченные к году экологии (2017 год объявлен годом экологии и особо охраняемых природных территорий в Российской Федерации).

Учителям 1-11 классов и воспитателям дошкольных ОУ вместе с ребятами рекомендуем принять участие в международном конкурсе «Я люблю природу», приуроченном к году экологии. Участники конкурса проверят свои знания правил поведения на природе, узнают интересные факты о животных и растениях, занесённых в Красную книгу России. Все ученики будут награждены красочными наградными материалами, а учителя получат бесплатные свидетельства о подготовке участников и призёров международного конкурса.

ПРИЁМ ЗАЯВОК ТОЛЬКО ДО 15 ДЕКАБРЯ!

Конкурс "Я люблю природу"

Егэ 11 класс информатика с пояснением 2016




Московские документы для аттестации!

124 курса профессиональной переподготовки от 4 795 руб.
274 курса повышения квалификации от 1 225 руб.

Для выбора курса воспользуйтесь поиском на сайте KURSY.ORG


Вы получите официальный Диплом или Удостоверение установленного образца в соответствии с требованиями государства (образовательная Лицензия № 038767 выдана ООО "Столичный учебный центр" Департаментом образования города МОСКВА).

ДИПЛОМ от Столичного учебного центра: KURSY.ORG


библиотека
материалов

Решение ЕГЭ информатика

1. Задание. Сколько единиц в двоичной записи шеснадцатеричного числа 12F016?

Пояснение.

Переведем число 12F016 в двоичную систему счисления: 12F016 = 10010111100002.

Подсчитаем количество единиц: их 6.

 

Ответ: 6.

2. Задание Логическая функция F задаётся выражением (¬z)x  xy. Определите, какому столбцу таблицы истинности функции F соответствует каждая из переменных x, y, z.

 

Перем. 1

Перем. 2

Перем. 3

Функция

???

???

???

F

0

0

0

0

0

0

1

1

0

1

0

0

0

1

1

1

1

0

0

0

1

0

1

0

1

1

0

0

1

1

1

1

 

В ответе напишите буквы x, y, z в том порядке, в котором идут соответствующие им столбцы (сначала – буква, соответствующая 1-му столбцу; затем – буква, соответствующая 2-му столбцу; затем – буква, соответствующая 3-му столбцу). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно. Пример. Пусть задано выражение x → y, зависящее от двух переменных x иy, и таблица истинности:

 

Перем. 1

Перем. 2

Функция

???

???

F

0

0

1

0

1

0

1

0

1

1

1

1

 

Тогда 1-му столбцу соответствует переменная y, а 2-му столбцу соответствует переменная x. В ответе нужно написать: yx.

Пояснение.

Данное выражение является дизъюнкцией двух конъюнкций. Можем заметить, что в обоих слагаемых есть множитель x. Т. е. при x = 0 сумма будет равна 0. Так, для переменной x подходит только третий столбец.

В восьмой строке таблицы x = 1, а значение функции равно 0. Такое возможно только при z = 1, у= 0, т. е. переменная1 − z, а переменная2 − y.

 

Ответ: zyx.

3. Задание На рисунке справа схема дорог Н-ского района изображена в виде графа, в таблице содержатся сведения о длинах этих дорог (в километрах).

 

hello_html_m424dd604.png


П1

П2

П3

П4

П5

П6

П7

П1


45


10




П2

45



40


55


П3





15

60


П4

10

40




20

35

П5



15



55


П6


55

60

20

55


45

П7




35


45


 

 

Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите, какова длина дороги из пункта В в пункт Е. В ответе запишите целое число – так, как оно указано в таблице.

Пояснение.

Пункт В − единственный пункт с пятью дорогами, значит ему соответствует П6, а пункт Е − единственный с четырьмя дорогами, значит ему соответствует П4.

Длина дороги из П6 в П4 равна 20.

 

Ответ: 20.

4. Задание В фрагменте базы данных представлены сведения о родственных отношениях. На основании приведённых данных определите, сколько прямых потомков (т.е. детей и внуков) Павленко А.К. упомянуты в таблице 1.

 

Таблица 1

ID

Фамилия_И.О.

Пол

2146

Кривич Л. П.

Ж

2155

Павленко А. К.

М

2431

Хитрук П. А.

М

2480

Кривич А. А.

М

2302

Павленко Е. А.

Ж

2500

Сокол Н. А.

Ж

3002

Павленко И. А.

М

2523

Павленко Т. Х.

Ж

2529

Хитрук А. П.

М

2570

Павленко П. И.

М

2586

Павленко Т. И.

Ж

2933

Симонян А. А.

Ж

2511

Сокол В. А.

Ж

3193

Биба С. А.

Ж

...

...

...


Таблица 2

ID_Родителя

ID_Ребенка

2146

2302

2146

3002

2155

2302

2155

3002

2302

2431

2302

2511

2302

3193

3002

2586

3002

2570

2523

2586

2523

2570

2529

2431

2529

2511

2529

3193

...

...


 

ИЛИ

 

Для групповых операций с файлами используются маски имён файлов. Маска представляет собой последовательность букв, цифр и прочих допустимых в именах файлов символов, в которых также могут встречаться следующие символы:

Символ «?» (вопросительный знак) означает ровно один произвольный символ.

Символ «*» (звездочка) означает любую последовательность символов произвольной длины, в том числе «*» может задавать и пустую последовательность.

В каталоге находится 6 файлов:

maveric.map

maveric.mp3

taverna.mp4

revolver.mp4

vera.mp3

zveri.mp3

Ниже представлено восемь масок. Сколько из них таких, которым соответствуют ровно четыре файла из данного каталога?

 

*ver*.mp*

*?ver?*.mp?

?*ver*.mp?*

*v*r*?.m?p*

???*???.mp*

???*???.m*

*a*.*a*

*a*.*p*

 

Пояснение.

Из таблицы 2 видим, что у Павленко А. К.(ID 2155) два ребенка, их ID: 2302 и 3002.

У Павленко Е. А.(ID 2302) трое детей, а у Павленко И. А.(ID 3002) двое.

Таким образом, у Павленко А. К. семеро прямых потомков: два ребенка и пять внуков.

 

Ответ: 7.

 

ИЛИ

 

Рассмотрим каждую маску:

1. По маске *ver*.mp* будет отобрано пять файлов:

maveric.mp3

taverna.mp4

revolver.mp4

vera.mp3

zveri.mp3

2. По маске *?ver?*.mp? будет отобрано три файла:

maveric.mp3

taverna.mp4

zveri.mp3

3. По маске ?*ver*.mp?* будет отобрано четыре файла:

maveric.mp3

taverna.mp4

revolver.mp4

zveri.mp3

4. По маске *v*r*?.m?p* будет отобран один файл:

maveric.map

5. По маске ???*???.mp* будет отобрано три файла:

maveric.mp3

taverna.mp4

revolver.mp4

6. По маске ???*???.m* будет отобрано четыре файла:

maveric.map

maveric.mp3

taverna.mp4

revolver.mp4

7. По маске *a*.*a* будет отобран один файл:

maveric.map

8. По маске *a*.*p* будет отобрано четыре файла:

maveric.map

maveric.mp3

taverna.mp4

vera.mp3

То есть три маски, которым соответствуют ровно четыре файла из данного каталога.

 

Ответ: 3.

Ответ: 7|3

5. Задание По каналу связи передаются сообщения, содержащие только четыре буквы: П, О, С, Т; для передачи используется двоичный код, допускающий однозначное декодирование. Для букв Т, О, П используются такие кодовые слова: Т: 111, О: 0, П: 100.

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

Пояснение.

Буква С не может кодироваться как 0, так как 0 уже занят.

Буква С не может кодироваться как 1, так как кодирование буквы Т начинается с 1.

Буква С не может кодироваться как 10, так как кодирование буквы П начинается с 10.

Буква С не может кодироваться как 11, так как кодирование буквы Т начинается с 11.

Буква С может кодироваться как 101 − это наименьшее возможное значение.

 

Ответ: 101.

6. Задание На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1. Строится двоичная запись числа N.

2. К этой записи дописываются справа ещё два разряда по следующему правилу:

    а) складываются все цифры двоичной записи, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 11100 преобразуется в запись 111001;

      б) над этой записью производятся те же действия – справа дописывается остаток от деления суммы цифр на 2.

Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R.

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

 

ИЛИ

 

У исполнителя Калькулятор две команды, которым присвоены номера:

1. прибавь 2,

2. умножь на 5.

Выполняя первую из них, Калькулятор прибавляет к числу на экране 2, а выполняя вторую, умножает его на 5.

Например, программа 2121 – это программа

умножь на 5,

прибавь 2,

умножь на 5,

прибавь 2,

которая преобразует число 1 в число 37.

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

Пояснение.

Данный алгоритм приписывает в конце числа или 10, если изначально в его двоичной записи было нечетное количество единиц, или 00 если четное.

12610 = 11111102 может получиться в результате работы алгоритма из числа 111112.

111112 = 3110.

 

Ответ: 31.

 

ИЛИ

 

Решим задачу от обратного, а потом запишем полученные команды справа налево.

Если число не делится на 5, тогда получено через команду 1, если делится, то через команду 2.

22 + 2 = 24(команда 1)

20 + 2 = 22(команда 1)

4 * 5 = 20(команда 2)

2 + 2 = 4(команда 1)

 

Ответ: 1211.

Ответ: 31|1211

7. Задание. Дан фрагмент электронной таблицы. Из ячейки E4 в ячейку D3 была скопирована формула. При копировании адреса ячеек в формуле автоматически изменились. Каким стало числовое значение формулы в ячейке D3?

 


A

B

C

D

E

1

40

4

400

70

7

2

30

3

300

60

6

3

20

2

200


5

4

10

1

100

40

=$B2 * C$3

 

Примечание: знак $ обозначает абсолютную адресацию.

 

ИЛИ

 

hello_html_29b1fef7.png

Дан фрагмент электронной таблицы.

 


A

B

C

1


6

10

2

=(A1-3)/(B1-1)

=(A1-3)/(C1-5)

= C1/(A1 – 3)

 

Какое целое число должно быть записано в ячейке A1, чтобы диаграмма, построенная по значениям ячеек диапазона A2:С2, соответствовала рисунку? Известно, что все значения ячеек из рассматриваемого диапазона неотрицательны.

Пояснение.

Формула, при копировании в ячейку D3 изменилась на =$B1 * B$3.

B1 * B3 = 4 * 2 = 8.

 

Ответ: 8.

 

ИЛИ

 

Подставим значения B1 и C1 в формулы A2:C2:

A2 = (A1-3)/5

B2 = (A1-3)/5

C2 = 10/(A1-3)

Так как A2 = B2, то С2 = 2 * A2 = 2 * B2

Подставим:

10/(A1-3) = 2*(A1-3)/5

A1 - 3 = 5

A1 = 8.

 

Ответ: 8.

8. Задание Запишите число, которое будет напечатано в результате выполнения следующей программы. Для Вашего удобства программа представлена на пяти языках программирования.

 

Бейсик

Python

DIM S, N AS INTEGER

S = 0

N = 0

WHILE S < 111

S = S + 8

N = N + 2

WEND

PRINT N

s = 0

n = 0

while s < 111:

s = s + 8

n = n + 2

print(n)

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

Паскаль

алг

нач

цел n, s

n := 0

s := 0

нц пока s < 111

s := s + 8

n := n + 2

кц

вывод n

кон

var s, n: integer;

begin

s := 0;

n := 0;

while s < 111 do

begin

s := s + 8;

n := n + 2

end;

writeln(n)

end.

Си

#include

int main()

{ int s = 0, n = 0;

while (s < 111) { s = s + 8; n = n + 2; }

printf("%d\n", n);

return 0;

}

 

Пояснение.

Цикл while выполняется до тех пор, пока истинно условие s < 111, т. е. переменная s определяет, сколько раз выполнится цикл. Поскольку изначально s = 0, цикл выполнится 14 раз, следовательно, n = 2 * 14 = 28.

 

Ответ: 28.


9. Задание. Какой минимальный объём памяти (в Кбайт) нужно зарезервировать, чтобы можно было сохранить любое растровое изображение размером 64×64 пикселов при условии, что в изображении могут использоваться 256 различных цветов? В ответе запишите только целое число, единицу измерения писать не нужно.

 

ИЛИ

 

Музыкальный фрагмент был записан в формате моно, оцифрован и сохранён в виде файла без использования сжатия данных. Размер полученного файла – 24 Мбайт. Затем тот же музыкальный фрагмент был записан повторно в формате стерео (двухканальная запись) и оцифрован с разрешением в 4 раза выше и частотой дискретизации в 1,5 раза меньше, чем в первый раз. Сжатие данных не производилось. Укажите размер файла в Мбайт, полученного при повторной записи. В ответе запишите только целое число, единицу измерения писать не нужно.

Пояснение.

Один пиксель кодируется 8 битами памяти.

Всего 64 * 64 = 212 пикселей.

Объем памяти, занимаемый изображением 212 * 8 = 215 бит = 212 байт = 4 Кбайт.

 

Ответ: 4.

 

ИЛИ

 

При записи того же файла в стерео формате его объем увеличивается в 2 раза. 24 * 2 = 48

При увеличении его разрешения в 4 раза его объем также увеличивается в 4 раза. 48 * 4 = 192

При уменьшении частоты дискретизации в 1,5 раза его объем уменьшается в 1,5 раза. 192 / 1,5 = 128.

 

Ответ: 128.

Ответ: 4|128

10. Задание Игорь составляет таблицу кодовых слов для передачи сообщений, каждому сообщению соответствует своё кодовое слово. В качестве кодовых слов Игорь использует 5-буквенные слова, в которых есть только буквы П, И, Р, причём буква П появляется ровно 1 раз. Каждая из других допустимых букв может встречаться в кодовом слове любое количество раз или не встречаться совсем. Сколько различных кодовых слов может использовать Игорь?

Пояснение.

Игорь может составить 24 слов поставив букву П на первое место. Аналогично можно поставить ее на второе, третье, четвертое и пятое место. Получим 5 * 24 = 80 слов.

 

Ответ: 80.

11. Задание Ниже на пяти языках программирования записаны две рекурсивные функции (процедуры): F и G.

 

Бейсик

Python

DECLARE SUB F(n)

DECLARE SUB G(n)

 

SUB F(n)

    IF n > 0 THEN G(n - 1)

END SUB

 

SUB G(n)

    PRINT "*"

    IF n > 1 THEN F(n - 3)

END SUB

def F(n):

    if n > 0:

        G(n - 1)

def G(n):

    print("*")

    if n > 1:

        F(n - 3)

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

Паскаль

алг F(цел n)

нач

    если n > 0 то

        G(n - 1)

    все

кон

 

алг G(цел n)

нач

    вывод "*"

    если n > 1 то

        F(n - 3)

    все

кон

procedure F(n: integer); forward;

procedure G(n: integer); forward;

 

procedure F(n: integer);

begin

    if n > 0 then

        G(n - 1);

end;

 

procedure G(n: integer);

begin

    writeln('*');

    if n > 1 then

        F(n - 3);

end;

Си

void F(int n);

void G(int n);

 

void F(int n){

    if (n > 0)

        G(n - 1);

}

 

void G(int n){

    printf("*");

    if (n > 1)

        F(n - 3);

}

 

 

Сколько символов «звёздочка» будет напечатано на экране при выполнении вызова F(11)?

Пояснение.

Промоделируем работу программы:

F(11)

G(10): *

F(7)

G(6): *

F(3)

G(2): *

F(-1)

 

Ответ: 3.

12. Задание В терминологии сетей TCP/IP маской сети называется двоичное число, определяющее, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу самого узла в этой сети. Обычно маска записывается по тем же правилам, что и IP-адрес, – в виде четырёх байтов, причём каждый байт записывается в виде десятичного числа. При этом в маске сначала (в старших разрядах) стоят единицы, а затем с некоторого разряда – нули. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и маске.

Например, если IP-адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.

Для узла с IP-адресом 111.81.208.27 адрес сети равен 111.81.192.0. Чему равно наименьшее возможное значение третьего слева байта маски? Ответ запишите в виде десятичного числа.

Пояснение.

Запишем третий байт IP-адреса и адреса сети в двоичной системе счисления:

20810 = 110100002

19210 = 110000002

Видим, что два первых слева бита маски − единицы, значит, чтобы значение было наименьшим, остальные биты должны быть нулями. Получаем, что третий слева байт маски равен 110000002 = 19210

 

Ответ: 192.

13. Задание При регистрации в компьютерной системе каждому пользователю выдаётся пароль, состоящий из 15 символов и содержащий только символы из 12-символьного набора: А, В, C, D, Е, F, G, H, K, L, M, N. В базе данных для хранения сведений о каждом пользователе отведено одинаковое и минимально возможное целое число байт. При этом используют посимвольное кодирование паролей, все символы кодируют одинаковым и минимально возможным количеством бит. Кроме собственно пароля, для каждого пользователя в системе хранятся дополнительные сведения, для чего выделено целое число байт; это число одно и то же для всех пользователей. Для хранения сведений о 20 пользователях потребовалось 400 байт. Сколько байт выделено для хранения дополнительных сведений об одном пользователе? В ответе запишите только целое число – количество байт.

Пояснение.

Согласно условию, в номере могут быть использованы 12 букв. Известно, что с помощью N бит можно закодировать 2N различных вариантов. Поскольку 23 < 12 < 24, то для записи каждого из 12 символов необходимо 4 бита.

Для хранения всех 15 символов пароля нужно 4 · 15 = 60 бит, а т. к. для записи используется целое число байт, то берём ближайшее не меньшее значение, кратное восьми, это число 64 = 8 · 8 бит (8 байт).

Пусть количество памяти, отведенное под дополнительные седения равно x, тогда:

20 * (8+x) = 400

x = 12

 

Ответ: 12.

14. Задание Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.

А) заменить (v, w).

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды

заменить (111, 27)

преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.

Б) нашлось (v).

Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка

исполнителя при этом не изменяется.

 Цикл

    ПОКА условие

        последовательность команд

    КОНЕЦ ПОКА

 выполняется, пока условие истинно.

 В конструкции

    ЕСЛИ условие

        ТО команда1

        ИНАЧЕ команда2

    КОНЕЦ ЕСЛИ

 выполняется команда1 (если условие истинно) или команда2 (если условие ложно).

Какая строка получится в результате применения приведённой ниже

программы к строке, состоящей из 68 идущих подряд цифр 8? В ответе

запишите полученную строку.

 НАЧАЛО

 ПОКА нашлось (222) ИЛИ нашлось (888)

    ЕСЛИ нашлось (222)

        ТО заменить (222, 8)

        ИНАЧЕ заменить (888, 2)

    КОНЕЦ ЕСЛИ

 КОНЕЦ ПОКА

 КОНЕЦ

Пояснение.

В 68 идущих подряд цифрах 8 22 группы по три восьмерки, которые заменятся на 22 двойки и останутся две восьмерки.

68(8) = 22(2) + 2(8)

22(2) + 2(8) = 1(2) + 9(8)

1(2) + 9(8) = 4(2)

4(2) = 1(2) + 1(8) = 28

 

Ответ: 28.

15. Задание рисунке представлена схема дорог, связывающих города А, Б, В, Г, Д, Е, Ж, З, И, К, Л, М.

По каждой дороге можно двигаться только в одном направлении, указанном стрелкой.

Сколько существует различных путей из города А в город М?

hello_html_m3abda467.png

Пояснение.

Начнем считать количество путей с конца маршрута — с города М. Пусть NX — количество различных путей из города А в город X, N — общее число путей. В город М можно приехать из Л или K, поэтому N = NМ = NЛ + NК. (*)

 

Аналогично:

NК = NИ;

NЛ = NИ;

NИ = NЕ + NЖ + NЗ

NК = NЕ = 1.

 

Добавим еще вершины:

NБ = NA = 1;

NВ = NБ + NА + NГ = 1 + 1 + 1 = 3;

NЕ = NГ = 1;

NГ = NA = 1.

 

Подставим в формулу (*): N = NM = 4 + 4 + 4 + 1 = 13.

 

Ответ: 13.

Ответ: 56

16. Задание Значение арифметического выражения: 98 + 35 – 9 – записали в систем счисления с основанием 3. Сколько цифр «2» содержится в этой записи?

Пояснение.

Преобразуем выражение:

(32)8 + 35 - 32

316 + 35 - 32

316 + 35 = 100...00100000

100...00100000 - 32 = 100...00022200

В полученном числе три двойки.

 

Ответ: 3

17. Задание В языке запросов поискового сервера для обозначения логической операции «ИЛИ» используется символ «|», а для обозначения логической операции «И» – символ «&». В таблице приведены запросы и количество найденных по ним страниц некоторого сегмента сети Интернет.

 

Запрос

Найдено страниц (в тысячах)

Гомер & Илиада

200

Гомер & (Одиссея | Илиада)

470

Гомер & Одиссея

355

 

Какое количество страниц (в тысячах) будет найдено по запросу Гомер & Одиссея & Илиада? Считается, что все запросы выполнялись практически одновременно, так что набор страниц, содержащих все искомые слова, не изменялся за время

выполнения запросов.

Пояснение.

hello_html_79c7e02e.png

Количество запросов в данной области будем обозначать Ni. Наша цель — N5.

Тогда из таблицы находим, что:

N5 + N6 = 355,

N4 + N5 = 200,

N4 + N5 + N6 = 470.

Из первого и второго уравнения: N4 + 2N5 + N6 = 555.

Из последнего уравнения: N5 = 85.

Ответ: 85

18. Задание Обозначим через m&n поразрядную конъюнкцию неотрицательных целых чисел m и n. Так, например, 14&5 = 11102&01012 = 01002 = 4.

Для какого наименьшего неотрицательного целого числа А формула

 

x&25 ≠ 0 → (x&17 = 0 → x&А ≠ 0)

тождественно истинна (т.е. принимает значение 1 при любом неотрицательном целом значении переменной х)?

Пояснение.

Введем обозначения:

(x А) ≡ A; (x P) ≡ P; (x Q) ≡ Q.

 

Преобразовав, получаем:

¬P ¬(Q ¬A) ¬P = ¬P ¬Q A.

 

Логическое ИЛИ истинно, если истинно хотя бы одно утверждение. Условию ¬P ¬Q = 1 удовлетворяют лучи (−∞, 40) и (60, ∞). Поскольку выражение ¬P ¬Q A должно быть тождественно истинным, выражение A должно быть истинно на отрезке [40, 60]. Его длина равна 20.

 

Ответ: 20.

Ответ: 8

19. Задание В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 4, 7, 3, 8, 5, 0, 1, 2, 9, 6 соответственно, т.е. A[0] = 4, A[1] = 7 и т.д.

Определите значение переменной c после выполнения следующего фрагмента этой программы (записанного ниже на пяти языках программирования).

 

Бейсик

Python

 c = 0

 FOR i = 1 TO 9

    IF A(i) < A(0) THEN

        c = c + 1

        t = A(i)

        A(i) = A(0)

        A(0) = t

    ENDIF

 NEXT i

 c = 0

 for i in range(1,10):

    if A[i] < A[0]:

        c = c + 1

        t = A[i]

        A[i] = A[0]

        A[0] = t

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

Паскаль

 

 c := 0

 нц для i от 1 до 9

    если A[i] < A[0] то

        c := c + 1

        t := A[i]

        A[i] := A[0]

        A[0] := t

    все

 кц

c := 0;

 for i := 1 to 9 do

    if A[i] < A[0] then

    begin

        c := c + 1;

        t := A[i];

        A[i] := A[0];

        A[0] := t;

    end;

Си

 c = 0;

 for (i = 1;i < 10;i++)

    if (A[i] < A[0])

    {

        c++;

        t = A[i];

        A[i] = A[0];

        A[0] = t;

    }

 

Пояснение.

Если A[i] элемент массива меньше A[0], то программа меняет их местами и увеличивает значение переменной c на 1. Программа выполнится дважды, первый раз поменяв местами A[0] и A[2], так как 3<4, и второй раз поменяв A[0] и A[5] (0<3). Таким образом значение переменной с станет равно 2.

 

Ответ: 2.

20. Задание Ниже на пяти языках программирования записан алгоритм. Получив на вход число x, этот алгоритм печатает число M. Известно, что x > 100. Укажите наименьшее такое (т.е. большее 100) число x, при вводе которого алгоритм печатает 26.

 

Бейсик

Python

DIM X, L, M AS INTEGER

INPUT X

L = X

M = 65

IF L MOD 2 = 0 THEN

    M = 52

ENDIF

WHILE L <> M

IF L > M THEN

    L = L – M

ELSE

    M = M – L

ENDIF

WEND

PRINT M

x = int(input())

L = x

M = 65

if L % 2 == 0:

    M = 52

while L != M:

    if L > M:

        L = L - M

    else:

        M = M - L

print(M)

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

Паскаль

алг

нач

    цел x, L, M

    ввод x

    L := x

    M := 65

    если mod(L,2)=0

        то

            M := 52

    все

    нц пока L <> M

        если L > M

            то

                L := L – M

            иначе

                M := M – L

        все

    кц

    вывод M

кон

var x, L, M: integer;

begin

    readln(x);

    L := x;

    M := 65;

    if L mod 2 = 0 then

        M := 52;

    while L <> M do

        if L > M then

            L := L - M

        else

            M := M – L;

    writeln(M);

end.

 

Си

#include

void main()

{

    int x, L, M;

    scanf("%d", &x);

    L = x;

    M = 65;

    if (L % 2 == 0)

        M = 52;

    while (L != M){

        if(L > M)

            L = L - M;

        else

            M = M - L;

    }

    printf("%d", M);

}

 

Пояснение.

В теле цикла числа M и L уменьшаются, пока не станут равными. Чтобы в итоге было напечатано 26, оба числа в какой-то момент должны быть равны 26. Пойдем от конца к началу: на предыдущем шаге одно число было 26, а другое 26 + 26 = 52. Еще на шаг раньше 52 + 26 = 78 и 52. До того 78 + 52 = 130 и 52. То есть наименьшее возможное число 130. А поскольку найденное число четное, то M будет присвоено значение 52, что и приведет к необходимому результату.

 

Ответ: 130.

21. Задание Напишите в ответе наименьшее значение входной переменной k, при котором программа выдаёт тот же ответ, что и при входном значении k = 10. Для Вашего удобства программа приведена на пяти языках программирования.

 

Бейсик

Python

DIM K, I AS LONG

INPUT K

I = 1

WHILE F(I) < G(K)

    I = I + 1

WEND

PRINT I

 

FUNCTION F(N)

    F = N * N * N

END FUNCTION

 

FUNCTION G(N)

    G = 2*N + 3

END FUNCTION

def f(n):

    return n*n*n

 

def g(n):

    return 2*n+3

 

k = int(input())

i = 1

while f(i) < g(k):

    i+=1

print (i)

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

Паскаль

алг

нач

    цел i, k

    ввод k

    i := 1

    нц пока f(i) < g(k)

        i := i + 1

    кц

    вывод i

кон

 

алг цел f(цел n)

нач

    знач := n * n * n

кон

 

алг цел g(цел n)

нач

    знач := 2*n + 3

кон

var

    k, i : longint;

 

function f(n: longint): longint;

begin

    f := n * n * n;

end;

 

function g(n: longint): longint;

begin

    g := 2*n + 3;

end;

 

begin

    readln(k);

    i := 1;

    while f(i) < g(k) do

        i := i+1;

    writeln(i)

end.

Си

#include

long f(long n) {

    return n * n * n;

}

 

long g(long n) {

    return 2*n + 3;

}

 

int main()

{

    long k, i;

    scanf("%ld", &k);

    i = 1;

    while(f(i)

        i++;(k))

    printf("%ld", i);

    return 0;

}

 

Пояснение.

Данная программа сравнивает http://reshuege.ru/formula/c6/c61a8cd66b598b11464e3f22ca9a79e7p.png и http://reshuege.ru/formula/81/810670a23425a8f38928d01d2b38c34bp.png и прибавляет к i единицу до тех пор, пока http://reshuege.ru/formula/67/67a388771730011e9c97c8b2e71c5f2fp.png. И выводит первое значение переменной i при котором http://reshuege.ru/formula/99/99b47aff6a0c136a29618c79e8d58201p.png

При k = 10, программа выведет число 3.

Запишем неравенство: http://reshuege.ru/formula/12/126d2714ac70a82bd81629c62fe0d597p.png отсюда получим, что наименьшее значение k = 3.

 

Ответ: 3.

22. Задание Исполнитель Май15 преобразует число на экране. У исполнителя есть две команды, которым присвоены номера:

1. Прибавить 1

2. Умножить на 2

Первая команда увеличивает число на экране на 1, вторая умножает его на 2. Программа для исполнителя Май15 – это последовательность команд. Сколько существует программ, для которых при исходном числе 2 результатом является число 29 и при этом траектория вычислений содержит число 14 и не содержит числа 25?

Траектория вычислений программы – это последовательность результатов

выполнения всех команд программы. Например, для программы 121 при исходном числе 7 траектория будет состоять из чисел 8, 16, 17.

Пояснение.

Для сложения справедлив переместительный (коммутативный) закон, значит, порядок команд в программе не имеет значения для результата.

Все команды увеличивают исходное число, поэтому количество команд не может превосходить (30 − 21) = 9. При этом минимальное количество команд — 3.

Таким образом, команд может быть 3, 4, 5, 6, 7, 8 или 9. Поэтому порядок команд не имеет значения, каждому числу команд соответствует один набор команд, которые можно расположить в любом порядке.

Рассмотрим все возможные наборы и вычислим количество вариантов рассположения команд в них. Набор 133 имеет 3 возможных вариантов расположения. Набор 1223 — 12 возможных вариантов расположения: это число перестановок с повторениями (1+2+1)!/(1! · 2! · 1!)). Набор 12222 — 5 вариантов. Набор 111222 — 20 возможных вариантов. Набор 11123 — 20 вариантов. Набор 111113 — 6 вариантов, набор 1111122 — 21 вариант, набор 11111112 — 8 вариантов, набор 111111111 — один вариант.

Всего имеем 3 + 12 + 5 + 20 + 20 + 6 + 21 + 8 + 1 = 96 программ.

 

Ответ: 96.

 

Ответ: 96.

Ответ: 13

23. Задание Сколько существует различных наборов значений логических переменныхx1, x2, ... x9, y1, y2, ... y9, которые удовлетворяют всем перечисленным ниже условиям?

 

(¬ (x1 ≡ y1)) ≡ (x2 ≡ y2)

(¬ (x2 ≡ y2)) ≡ (x3 ≡ y3)

      …

(¬ (x8 ≡ y8)) ≡ (x9 ≡ y9)

В ответе не нужно перечислять все различные наборы значений переменных x1, x2, ... x9, y1, y2, ... y9, при которых выполнена данная система равенств. В качестве ответа Вам нужно указать количество таких наборов.

Пояснение.

Из последнего уравнения находим, что возможны три варианта значений x8 и y8: 01, 00, 11. Построим древо вариантов для первой и второй пар значений.

 

hello_html_m1d4bf2b3.png

 

Таким образом, имеем 16 наборов переменных.

Дерево вариантов для пары значений 11:

 

hello_html_m31caaab9.png

 

Получаем 45 вариантов. Таким образом, система будет иметь 45 + 16 = 61 различных наборов решений.

 

Ответ: 61.

Ответ: 1024

24. Задание На обработку поступает положительное целое число, не превышающее 109. Нужно написать программу, которая выводит на экран сумму цифр этого числа, меньших 7. Если в числе нет цифр, меньших 7, требуется на экран вывести 0. Программист написал программу неправильно. Ниже эта программа для Вашего удобства приведена на пяти языках программирования.

 

 

Бейсик

Python

DIM N, DIGIT, SUM AS LONG

INPUT N

SUM = 0

WHILE N > 0

    DIGIT = N MOD 10

    IF DIGIT < 7 THEN

        SUM = SUM + 1

    END IF

    N = N \ 10

WEND

PRINT DIGIT

N = int(input())

sum = 0

while N > 0:

    digit = N % 10

    if digit < 7:

        sum = sum + 1

    N = N // 10

print(digit)

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

Паскаль

алг

нач

    цел N, digit, sum

    ввод N

    sum := 0

    нц пока N > 0

        digit := mod(N,10)

        если digit < 7 то

            sum := sum + 1

        все

        N := div(N,10)

    кц

    вывод digit

кон

var N, digit, sum: longint;

begin

    readln(N);

    sum := 0;

    while N > 0 do

    begin

        digit := N mod 10;

        if digit < 7 then

            sum := sum + 1;

        N := N div 10;

    end;

    writeln(digit)

end.

Си

#include

int main()

{

    int N, digit, sum;

    scanf("%d", &N);

    sum = 0;

    while (N > 0)

    {

        digit = N % 10;

        if (digit < 7)

            sum = sum + 1;

        N = N / 10;

    }

    printf("%d",digit);

    return0;

}

 

 

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

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

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

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

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

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

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

Пояснение.

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

1. Программа выведет число 4.

2. Пример числа, при вводе которого программа выдаёт верный ответ: 835.

Замечание для проверяющего. Программа работает неправильно из-за неверной выводимой на экран переменной и неверного увеличения суммы. Соответственно, программа будет работать верно, если в числе старшая цифра (крайняя левая) равна сумме цифр, меньших 7.

3. В программе есть две ошибки.

Первая ошибка. Неверное увеличение суммы.

Строка с ошибкой:

sum := sum + 1;

Верное исправление:

sum := sum + digit;

Вторая ошибка. Неверный вывод ответа на экран.

Строка с ошибкой:

writeln(digit)

Верное исправление:

writeln(sum)

25. Задание Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от –10 000 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых хотя бы одно число делится на 3. В данной задаче под парой подразумевается два подряд идущих элемента массива. Например, для массива из пяти элементов: 6; 2; 9; –3; 6 – ответ: 4.

Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования и естественного языка. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.

 

 

Бейсик

Python

CONST N AS INTEGER = 20

DIM A (1 TO N) AS INTEGER

DIM I AS INTEGER,

       J AS INTEGER,

       K AS INTEGER

 

FOR I = 1 TO N

INPUT A(I)

NEXT I

...

END

# допускается также

# использовать две

# целочисленные переменные j и k

a = []

n = 20

for i in range(0, n):

    a.append(int(input()))

...

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

Паскаль

алг

нач

    цел N = 20

    целтаб a[1:N]

    цел i, j, k

    нц для i от 1 до N

        ввод a[i]

    кц

    ...

кон

const

    N = 20;

var

    a: array [1..N] of integer;

    i, j, k: integer;

begin

    for i := 1 to N do

        readln(a[i]);

    ...

end.

Си

Естественный язык

#include

#define N 20

int main() {

    int a[N];

    int i, j, k;

    for (i = 0; i < N; i++)

        scanf("%d", &a[i]);

    ...

    return 0;

}

Объявляем массив A из 20 элементов.

Объявляем целочисленные переменные I, J, K.

В цикле от 1 до 20 вводим элементы массива A с 1-го по 20-й.

 

 

В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6) или в виде блок-схемы. В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).

Пояснение.


Бейсик

K = 0

FOR I = 1 TO N-1

    IF (A(I) MOD 3 = 0) OR (A(I + 1) MOD 3 = 0) THEN

        K = K+1

    END IF

NEXT I

PRINT K

Python

k = 0

for i in range(0, n – 1):

    if (a[i] % 3 == 0 or a[i + 1] % 3 == 0):

        k += 1

print(k)


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

k := 0;

нц для i от 1 до N-1

    если mod(a[i],3)=0 или mod(a[i+1],3)=0

    то

        k := k+1

    все

кц

вывод k


Паскаль

k := 0;

for i := 1 to N-1 do

    if (a[i] mod 3=0) or (a[i+1] mod 3=0) then

        inc(k);

writeln(k);


Си

k = 0;

for (i = 0; i

    if (a[i]%3 == 0 || a[i+1]%3 == 0)

        k++;

printf("%d", k);

Естественный язык

Записываем в переменную K начальное значение, равное 0. В цикле от первого элемента до предпоследнего находим остаток от деления текущего и следующего элемента массива на 3. Если первый или второй из полученных остатков равен 0, увеличиваем переменную K на единицу. После завершения цикла выводим значение переменной K

26. Задание Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два раза. Например, пусть в одной куче 10 камней, а в другой 7 камней; такую позицию в игре будем обозначать (10, 7). Тогда за один ход можно получить любую из четырёх позиций: (11, 7), (20, 7), (10, 8), (10, 14). Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней.

Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 73. Победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, что в кучах всего будет 73 камня или больше.

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Описать стратегию игрока – значит описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при различной игре противника. Например, при начальных позициях (6, 34), (7, 33), (9, 32) выигрышная стратегия есть у Пети. Чтобы выиграть, ему достаточно удвоить количество камней во второй куче.

Задание 1. Для каждой из начальных позиций (6, 33), (8, 32) укажите, кто из игроков имеет выигрышную стратегию. В каждом случае опишите выигрышную стратегию; объясните, почему эта стратегия ведёт к выигрышу, и укажите, какое наибольшее количество ходов может потребоваться победителю для выигрыша при этой стратегии.

Задание 2. Для каждой из начальных позиций (6, 32), (7, 32), (8, 31) укажите, кто из игроков имеет выигрышную стратегию. В каждом случае опишите выигрышную стратегию; объясните, почему эта стратегия ведёт к выигрышу, и укажите, какое наибольшее количество ходов может потребоваться победителю для выигрыша при этой стратегии.

Задание 3. Для начальной позиции (7, 31) укажите, кто из игроков имеет выигрышную стратегию. Опишите выигрышную стратегию; объясните, почему эта стратегия ведёт к выигрышу, и укажите, какое наибольшее количество ходов может потребоваться победителю для выигрыша при этой стратегии. Постройте дерево всех партий, возможных при указанной Вами выигрышной стратегии. Представьте дерево в виде рисунка или таблицы.

Пояснение.














Положение после очередных ходов

Исходное положение

1-й ход Пети (разобраны все ходы, указанна полученная позиция)

1-й ход Вани (только ход по стратегии, указана полученная позиция)

2-й ход Пети (разобраны все ходы, указана полученная позиция)

2-й ход Вани (только ход по стратегии, указана полученная позиция)







(7,31)



Всего 38



(7,31+1)=(7,32)

Всего 39



(7+1,32)=(8,32)

Всего 40

(8+1,32)=(9,32)

Всего 41

(9,32*2)=(9,64)

Всего 73

(8,32+1)=(8,33)

Всего 41

(8,33*2)=(8,66)

Всего 74

(8*2,32)=(16,32)

Всего 48

(16,32*2)=(16,64)

Всего80

(8,32*2)=(8,64)

Всего 72

(8,64*2)=(8,128)

Всего 136

(7+1,31)=(8,31)

Всего 39

(8,31+1)=(8,32)

Всего 40

(8+1,32)=(9,32)

Всего 41

(9,32*2)=(9,64)

Всего 73

(8,32+1)=(8,33)

Всего41

(8,33*2)=(8,66)

Всего 74

(8*2,32)=(16,32)

Всего 48

(16,32*2)=(16,64)

Всего 80

(8,32*2)=(8,64)

Всего 72

(8,64*2)=(8,128)

Всего 136

(7*2,31)=(14,31)

Всего 45

(14,31*2)=(14,62)

Всего 76



(7,31*2)=(7,62)

Всего 69

(7,62*2)=(7,124)

Всего 131




Задание 1. В начальных позициях (6, 33), (8, 32) выигрышная стратегия есть у Вани. При начальной позиции (6, 33) после первого хода Пети может получиться одна из следующих четырёх позиций: (7, 33), (12, 33), (6, 34), (6, 66). Каждая из этих позиций содержит менее 73 камней. При этом из любой из этих позиций Ваня может получить позицию, содержащую не менее 73 камней, удвоив количество камней во второй куче. Для позиции (8, 32) после первого хода Пети может получиться одна из следующих четырёх позиций: (9, 32), (16, 32), (8, 33), (8, 64). Каждая из этих позиций содержит менее 73 камней. При этом из любой из этих позиций Ваня может получить позицию, содержащую не менее 73 камней, удвоив количество камней во второй куче. Таким образом, Ваня при любом ходе Пети

выигрывает своим первым ходом.

Задание 2. В начальных позициях (6, 32), (7, 32) и (8, 31) выигрышная стратегия есть у Пети. При начальной позиции (6, 32) он должен первым ходом получить позицию (6, 33), из начальных позиций (7, 32) и (8, 31). Петя после первого хода должен получить позицию (8, 32). Позиции (6, 33) и (8, 32) рассмотрены при разборе задания 1. В этих позициях выигрышная стратегия есть у игрока, который будет ходить вторым (теперь это Петя). Эта стратегия описана при разборе задания 1. Таким образом, Петя при любой игре Вани выигрывает своим вторым ходом.

Задание 3. В начальной позиции (7, 31) выигрышная стратегия есть у Вани. После первого хода Пети может возникнуть одна из четырёх позиций: (8, 31), (7, 32), (14, 31) и (7, 62). В позициях (14, 31) и (7, 62) Ваня может выиграть одним ходом, удвоив количество камней во второй куче. Позиции (8, 31) и (7, 32) были рассмотрены при разборе задания 2. В этих позициях у игрока, который должен сделать ход (теперь это Ваня), есть выигрышная стратегия. Эта стратегия описана при разборе задания 2. Таким образом, в зависимости от игры Пети Ваня выигрывает на первом или втором ходу.

27. Задание В физической лаборатории проводится долговременный эксперимент по изучению гравитационного поля Земли. По каналу связи каждую минуту в лабораторию передаётся положительное целое число – текущее показание прибора «Сигма 2015». Количество передаваемых чисел в серии известно и не превышает 10 000. Все числа не превышают 1000. Временем, в течение которого происходит передача, можно пренебречь.

Необходимо вычислить «бета-значение» серии показаний прибора – минимальное чётное произведение двух показаний, между моментами передачи которых прошло не менее 6 минут. Если получить такое произведение не удаётся, ответ считается равным –1.

Вам предлагается два задания, связанных с этой задачей: задание А и задание Б. Вы можете решать оба задания или одно из них по своему выбору. Итоговая оценка выставляется как максимальная из оценок за задания А и Б. Если решение одного из заданий не представлено, то считается, что оценка за это задание – 0 баллов. Задание Б является усложнённым вариантом задания А, оно содержит дополнительные требования к программе.

А. Напишите на любом языке программирования программу для решения поставленной задачи, в которой входные данные будут запоминаться в массиве, после чего будут проверены все возможные пары элементов. Перед программой укажите версию языка программирования.

ОБЯЗАТЕЛЬНО укажите, что программа является решением ЗАДАНИЯ А.

Максимальная оценка за выполнение задания А – 2 балла.

Б. Напишите программу для решения поставленной задачи, которая будет эффективна как по времени, так и по памяти (или хотя бы по одной из этих характеристик).

Программа считается эффективной по времени, если время работы

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

Программа считается эффективной по памяти, если размер памяти, использованной в программе для хранения данных, не зависит от числа N и не превышает 1 килобайта.

Перед программой укажите версию языка программирования и кратко опишите использованный алгоритм.

ОБЯЗАТЕЛЬНО укажите, что программа является решением ЗАДАНИЯ Б.

Максимальная оценка за правильную программу, эффективную по времени и по памяти, – 4 балла.

Максимальная оценка за правильную программу, эффективную по времени, но неэффективную по памяти, – 3 балла. НАПОМИНАЕМ! Не забудьте указать, к какому заданию относится каждая из представленных Вами программ.

Входные данные представлены следующим образом. В первой строке задаётся число N – общее количество показаний прибора. Гарантируется, что N > 6. В каждой из следующих N строк задаётся одно положительное целое число – очередное показание прибора.

Пример входных данных:

11

12

45

5

3

17

23

21

20

19

18

17

Программа должна вывести одно число – описанное в условии произведение либо –1, если получить такое произведение не удаётся.

Пример выходных данных для приведённого выше примера входных данных:

54

Пояснение.

Задание Б (решение для задания А приведено ниже, см. программу 4). Чтобы произведение было чётным, хотя бы один сомножитель должен быть чётным, поэтому при поиске подходящих произведений чётные показания прибора можно рассматривать в паре с любыми другими, а нечётные – только с чётными.

Для каждого показания с номером k, начиная с k = 7, рассмотрим все допустимые по условиям задачи пары, в которых данное показание получено вторым. Минимальное произведение из всех этих пар будет получено, если первым в паре будет взято минимальное подходящее показание среди всех, полученных от начала приёма и до показания с номером k – 6. Если очередное показание чётное, минимальное среди предыдущих может быть любым, если нечётное – только чётным.

Для получения эффективного по времени решения нужно по мере ввода данных помнить абсолютное минимальное и минимальное чётное показание на каждый момент времени, каждое вновь полученное показание умножать на соответствующий ему минимум, имевшийся на 6 элементов ранее, и выбрать минимальное из всех таких произведений.

Поскольку каждое текущее минимальное показание используется после ввода ещё 6 элементов и после этого становится ненужным, достаточно хранить только 6 последних минимумов. Для этого можно использовать массив из 6 элементов и циклически заполнять его по мере ввода данных. Размер этого массива не зависит от общего количества введённых показаний, поэтому такое решение будет эффективным не только по времени, но и по памяти. Чтобы хранить абсолютный и чётный минимумы, нужно использовать два таких массива. Ниже приводится пример такой программы, написанной на алгоритмическом языке.

 

Пример 1. Пример правильной программы на алгоритмическом языке. Программа эффективна и по времени, и по памяти.

алг

нач

    цел s = 6 | требуемое расстояние между показаниями

    цел amax = 1001 | больше максимально возможного показания

    цел N

    ввод N

    цел a | очередное показание прибора

    целтаб мини[0:s-1] | текущие минимумы последних s элементов

    целтаб миничет[0:s-1] | чётные минимумы последних s элементов

    цел i

    | вводим первые s показаний, фиксируем минимумы

    цел ма; ма := amax | минимальное показание

    цел мчет; мчет := amax | минимальное чётное показание

    нц для i от 1 до s

        ввод а

        ма := imin(ма, a)

        если mod(a,2) = 0 то мчет := imin(мчет,a) все

        мини[mod(i, s)] := ма

        миничет[mod(i, s)] := мчет

    кц

    цел мп = amax*amax | минимальное значение произведения

    цел п

    нц для i от s+1 до N

        ввод а

        если mod(a,2)=0

            то п := a * мини[mod(i, s)]

            иначе если мчет < amax

                то п := a * миничет[mod(i, s)]

                иначе п := amax*amax;

            все

        все

        мп := imin(мп, п)

        ма := imin(ма, a)

        если mod(a,2) = 0 то мчет := imin(мчет,a) все

        мини[mod(i, s)] := ма

        миничет[mod(i, s)] := мчет

    кц

    если мп = amax*amax то мп:=-1 все

    вывод мп

кон

 

Возможны и другие реализации. Например, вместо циклического заполнения массива можно каждый раз сдвигать его элементы. В приведённом ниже примере хранятся и сдвигаются не минимумы, а исходные значения. Это требует чуть меньше памяти (достаточно одного массива вместо двух), но по времени решение со сдвигами менее эффективно, чем с циклическим заполнением. Однако время работы остаётся пропорциональным N, поэтому максимальная оценка за такое решение тоже составляет 4 балла.

 

Программа 2. Пример правильной программы на языке Паскаль.

Программа использует сдвиги, но эффективна по времени и по памяти

 

const s = 6; {требуемое расстояние между показаниями}

        amax = 1001; {больше максимально возможного показания}

var

    N: integer;

    a: array[1..s] of integer; {хранение s показаний прибора}

    a_: integer; {ввод очередного показания}

    ma: integer; {минимальное число без s последних}

    me: integer; {минимальное чётное число без s последних}

    mp: integer; {минимальное значение произведения}

    p: integer;

    i, j: integer;

begin

    readln(N);

    {Ввод первых s чисел}

    for i:=1 to s do readln(a[i]);

    {Ввод остальных значений, поиск минимального произведения}

    ma := amax; me := amax;

    mp :=amax*amax;

    for i := s + 1 to N do begin

        readln(a_);

        if a[1] < ma then ma := a[1];

        if (a[1] mod 2 = 0) and (a[1] < me) then me := a[1];

        if a_ mod 2 = 0 then p := a_ * ma

        else if me < amax then p := a_ * me

        else p := amax* amax;

        if (p < mp) then mp := p;

        {сдвигаем элементы вспомогательного массива влево}

        for j := 1 to s - 1 do

            a[j] := a[j + 1];

        a[s] := a_

    end;

    if mp = amax*amax then mp:=-1;

    writeln(mp)

end.

 

Если вместо небольшого массива фиксированного размера (циклического или со сдвигами) хранятся все исходные данные (или все текущие минимумы), программа сохраняет эффективность по времени, но становится неэффективной по памяти, так как требуемая память растёт пропорционально N. Ниже приводится пример такой программы на языке Паскаль. Подобные (и аналогичные по сути) программы оцениваются не выше 3 баллов.

 

Программа 3. Пример правильной программы на языке Паскаль. Программа эффективна по времени, но неэффективна по памяти

 

const s = 6; {требуемое расстояние между показаниями}

        amax = 1001; {больше максимально возможного показания}

var

    N, p, i: integer;

    a: array[1..10000] of integer; {все показания прибора}

    ma: integer; {минимальное число без s последних}

    me: integer; {минимальное чётное число без s последних}

    mp: integer; {минимальное значение произведения}

begin

    readln(N);

    {Ввод всех показаний прибора}

    for i:=1 to N do readln(a[i]);

    ma := amax;

    me := amax;

    mp := amax*amax;

    for i := s + 1 to N do

    begin

        if a[i-s] < ma then ma := a[i-s];

        if (a[i-s] mod 2 = 0) and (a[i-s] < me) then

            me := a[i-s];

        if a[i] mod 2 = 0 then p := a[i] * ma

        else if me < amax then p := a[i] * me

        else p := amax * amax;

        if (p < mp) then mp := p

    end;

    if mp = amax*amax then mp := -1;

    writeln(mp)

end.

 

Возможно также переборное решение, в котором находятся произведения всех возможных пар и из них выбирается минимальное. Ниже (см. программу 4) приведён пример подобного решения. Это (и аналогичные ему) решение неэффективно ни по времени, ни по памяти. Оно является решением задания А, но не является решением задания Б. Оценка за такое решение – 2 балла.

 

Программа 4. Пример правильной программы на языке Паскаль. Программа неэффективна ни по времени, ни по памяти

 

const s = 6; {требуемое расстояние между показаниями}

var

    N: integer;

    a: array[1..10000] of integer; {все показания прибора}

    mp: integer; {минимальное значение произведения}

    i, j: integer;

begin

    readln(N);

    {Ввод значений прибора}

    for i:=1 to N do

        readln(a[i]);

    mp := 1000 * 1000 + 1;

    for i := 1 to N-s do begin

        for j := i+s to N do begin

            if (a[i]*a[j] mod 2 = 0) and (a[i]*a[j] < mp)

                then mp := a[i]*a[j]

        end;

    end;

    if mp = 1000 * 1000 + 1 then mp := -1;

    writeln(mp)

end.





Самые низкие цены на курсы переподготовки

Специально для учителей, воспитателей и других работников системы образования действуют 50% скидки при обучении на курсах профессиональной переподготовки.

После окончания обучения выдаётся диплом о профессиональной переподготовке установленного образца с присвоением квалификации (признаётся при прохождении аттестации по всей России).

Обучение проходит заочно прямо на сайте проекта "Инфоурок", но в дипломе форма обучения не указывается.

Начало обучения ближайшей группы: 13 декабря. Оплата возможна в беспроцентную рассрочку (10% в начале обучения и 90% в конце обучения)!

Подайте заявку на интересующий Вас курс сейчас: https://infourok.ru


Общая информация

Номер материала: ДВ-549703
Курсы профессиональной переподготовки
133 курса

Выдаем дипломы установленного образца

Заочное обучение - на сайте «Инфоурок»
(в дипломе форма обучения не указывается)

Начало обучения: 13 декабря
(набор групп каждую неделю)

Лицензия на образовательную деятельность
(№5201 выдана ООО «Инфоурок» 20.05.2016)


Скидка 50%

от 13 800  6 900 руб. / 300 часов

от 17 800  8 900 руб. / 600 часов

Выберите квалификацию, которая должна быть указана в Вашем дипломе:
... и ещё 87 других квалификаций, которые Вы можете получить

Похожие материалы

Получите наградные документы сразу с 38 конкурсов за один орг.взнос: Подробнее ->>