Русский язык (Определение главной информации текста)
Результаты теста
Затрачено времени:
09:18:16
Вопрос 1
Даны 4 целых числа, записанные в двоичной системе:
10001011, 10111000, 10011011, 10110100.
Сколько среди них чисел, больших, чем BC16+208?
Пояснение
Переведем числа в десятичную систему счисления:
BC16 + 208 = 11·16+12 + 2·8 = 188 + 16 = 20410.
Переведем полученное число в двоичную систему счисления:
20410 = 1⋅27 + 1⋅26 + 0⋅25 + 0⋅24 + 1⋅23 + 1⋅22 + 0⋅2 + 0 = 110011002.
Сравним его с данными нам в условии двоичными числами:
10001011 — меньше, чем 11001100;
10111000 — меньше, чем 11001100;
10011011 — меньше, чем 11001100;
10110100 — меньше, чем 11001100.
Среди заданных чисел нет больших, чем BC16 + 208.
Ваш ответ:
Вы пропустили вопрос
Вопрос 2
Логическая функция F задаётся выражением ((x ∧ w) ∨ (w ∧ z)) ≡ ((z → y) ∧ (y → x)).
Дан частично заполненный фрагмент, содержащий неповторяющиеся строки таблицы истинности функции F.
Определите, какому столбцу таблицы истинности соответствует каждая из переменных x, y, z, w.
Переменная 1 | Переменная 2 | Переменная 3 | Переменная 4 | Функция |
??? |
??? |
??? |
??? |
F |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
|
0 |
1 |
1 |
0 |
|
0 |
1 |
В ответе напишите буквы x, y, z, w в том порядке, в котором идут соответствующие им столбцы (сначала — буква, соответствующая первому столбцу; затем — буква, соответствующая второму столбцу, и т. д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Пример. Пусть задано выражение x → y, зависящее от двух переменных x и y, и фрагмент таблицы истинности:
Переменная 1 | Переменная 1 | Функция |
??? |
??? |
F |
0 |
1 |
0 |
Тогда первому столбцу соответствует переменная y, а второму столбцу соответствует переменная x. В ответе нужно написать: yx.
Пояснение
Поскольку строки в таблице не должны повторяться, заполним пустые ячейки в таблице:
Переменная 1 | Переменная 2 | Переменная 3 | Переменная 4 | Функция |
??? |
??? |
??? |
??? |
F |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
Рассмотрим данное выражение. Логическая функция принимает значение 1, когда обе части выражения принимают значения 1 или 0. Первая часть выражения принимает значение 1 при наборах переменных x, z, w равных соответственно 011, 101, 111. Вторая часть выражения принимает значение 1 при наборах переменных x, y, z равных соответственно 000, 100, 110, 111. Первая часть выражения принимает значение 0 при наборах переменных x, z, w равных соответственно 000, 001, 010, 100, 110. Вторая часть выражения принимает значение 0 при наборах переменных x, y, z равных соответственно 001, 010, 011, 101. Заметим, что y соответствует первому столбцу таблицы истинности, а w и x третьему и четвёртому столбцам таблицы истинности. Значит, второму столбцу таблицы истинности соответствует z.
Ответ: yzwx. ((x ∧ w) ∨ (w ∧ z)) ≡ ((z → y) ∧ (y → x)).
Ваш ответ:
Вы пропустили вопрос
Вопрос 3
Между населёнными пунктами А, Б, В, Г, Д, Е и К построены дороги, протяжённость которых приведена в таблице. (Отсутствие числа в таблице означает, что прямой дороги между пунктами нет.)
|
А |
Б |
В |
Г |
Д |
Е |
К |
А |
|
5 |
|
|
|
|
|
Б |
5 |
|
3 |
5 |
8 |
|
|
В |
|
3 |
|
|
4 |
|
|
Г |
|
5 |
|
|
1 |
|
3 |
Д |
|
8 |
4 |
1 |
|
2 |
5 |
Е |
|
|
|
|
2 |
|
1 |
К |
|
|
|
3 |
5 |
1 |
|
Определите длину кратчайшего пути между пунктами А и К (при условии, что передвигаться можно только по построенным дорогам).
Пояснение
Составим маршрут следующим образом: стартуя из пункта А, будем всегда выбирать тот пункт, расстояние до которого наименьшее. Получим маршрут А—Б—В—Д—Г—К, его длина равна 16 км. Теперь, начиная с конца маршрута, будем изменять населённые пункты:
А—Б—В—Д—Е—К: длина маршрута 15 км,
A—Б—Г—Д—Е—К: длина маршрута 14 км.
A—Б—Г—К: длина маршрута 13 км.
Дальнейшее изменение населённых пунктов, через которые проходит маршрут, бессмысленно, поскольку длины маршрутов будут более 13 км. Следовательно, длина кратчайшего маршрута равна 13 км.
Ваш ответ:
Вы пропустили вопрос
Вопрос 4
В фрагменте базы данных представлены сведения о родственных отношениях. На основании приведённых данных определите ID родной сестры Притулы П. И.
Таблица 1 |
ID |
Фамилия_И.О. |
Пол |
2294 |
Решко Л.П. |
Ж |
3039 |
Притула А.К. |
М |
3043 |
Вирченко В.А. |
Ж |
2232 |
Плиев Г.А. |
М |
2659 |
Притула Е.А. |
Ж |
2144 |
Вирченко Н.А. |
Ж |
2278 |
Притула И.А. |
М |
2849 |
Ложкина Т.Х. |
Ж |
2158 |
Король А.П. |
М |
2487 |
Брик А.И. |
Ж |
3021 |
Притула П.И. |
М |
2494 |
Притула А.И. |
Ж |
2565 |
Мутян С.А. |
Ж |
2876 |
Король П.А. |
М |
|
Таблица 2 |
ID_Родителя |
ID_Ребенка |
2294 |
2659 |
2294 |
2278 |
3039 |
2659 |
3039 |
2278 |
2659 |
3043 |
2659 |
2565 |
2659 |
2876 |
2278 |
3021 |
2278 |
2487 |
2849 |
3021 |
2849 |
2487 |
2158 |
3043 |
2158 |
2565 |
2158 |
2876 |
|
Пояснение
Из первой таблицы ясно, что ID Притулы П. И. 3021. Найдем этот номер во второй таблице в графе «ID_ребенка» видим, что этому номеру соотвествует два значения «ID_родителя» 2278 и 2849. Из второй таблицы также видно, что у родителей с этими ID помимо Притулы П. И. есть ребёнок с ID 2487, значит это брат или сестра Притулы П. И. Теперь найдём ID 2487 в первой таблице этому ID соответствует женщина — Брик А. И.
Ваш ответ:
Вы пропустили вопрос
Вопрос 5
По каналу связи передаются сообщения, содержащие только семь букв: А, Б, И, К, Л, С, Ц. Для передачи используется двоичный код, удовлетворяющий условию Фано. Кодовые слова для некоторых букв известны: Б — 00, К — 010, Л — 111. Какое наименьшее количество двоичных знаков потребуется для кодирования слова АБСЦИССА?
Примечание. Условие Фано означает, что ни одно кодовое слово не является началом другого кодового слова.
Пояснение
Букву С закодируем кодовым словом 10, поскольку буква С повторяется в слове АБСЦИССА 3 раза. Букву А закодируем кодовым словом 011, поскольку буква А повторяется в слове АБСЦИССА 2 раза. Буквы Ц и И закодируем кодовыми словами 1101 и 1100 соответственно. Тогда наименьшее количество двоичных знаков, которые потребуются для кодирования слова АБСЦИССА равно 3 + 2 + 2 + 4 + 4 + 2 + 2 + 3 = 22.
Ваш ответ:
Вы пропустили вопрос
Вопрос 6
Исполнитель Робот ходит по клеткам бесконечной вертикальной клетчатой доски, переходя по одной из команд вверх, вниз, вправо, влево в соседнюю клетку в указанном направлении. Робот выполнил следующую программу:
вправо
вниз
вправо
вверх
влево
вверх
вверх
влево
Укажите наименьшее возможное число команд, которое необходимо для того, чтобы Робот вернулся в ту же клетку, из которой начал движение.
Пояснение
Задачу можно решить, повторив все движения Робота на бумаге. Затем соединить начальную клетку и конечную клетку пути Робота, используя имеющиеся команды, и посчитать их количество.
Заметим, что пары команд «вверх-вниз» и «влево-вправо» дают нулевой эффект, то есть, не перемещают Робота, поэтому все такие пары можно выкинуть из программы, вдобавок, поскольку стенок нет, все равно где стоят парные команды в программе. Вычеркнув все пары, видим, что остались только команды вверх, вверх. Их две.
Ваш ответ:
Вы пропустили вопрос
Вопрос 7
В некоторые ячейки электронной таблицы записаны числа, как показано на рисунке.
|
A |
B |
C |
D |
E |
F |
1 |
0 |
1 |
2 |
3 |
4 |
5 |
2 |
10 |
|
|
|
|
|
3 |
20 |
|
|
|
|
|
4 |
30 |
|
|
|
|
|
5 |
40 |
|
|
|
|
|
6 |
50 |
|
|
|
|
|
В ячейке D3 записали формулу = D$1 + $A3. После этого ячейку D3 скопировали в ячейку F5. Какое число будет показано в ячейке F5?
Примечание. Знак $ используется для обозначения абсолютной адресации.
Пояснение
Формулу перенесли на 2 строку вниз и на 2 столбца вправо. Значит, в формуле все строки также сдвинутся на 1 вниз, а столбцы на 1 влево. Кроме тех, что обозначены знаком $. После копирования формулы из ячейки D3 в ячейку F5 получится формула = F$1 + $A5 = 5 + 40 = 45.
Ваш ответ:
Вы пропустили вопрос
Вопрос 8
Определите число, которое будет напечатано в результате выполнения программы (записанной ниже на разных языках программирования).
Бейсик | Паскаль |
DIM N, S AS INTEGER
N = 10
S = 0
WHILE S <= 249
S = S + 24
N = N + 3
WEND
PRINT N
|
var n, s: integer;
begin
n := 10;
s := 0;
while s <= 249 do
begin
s := s + 24;
n := n + 3
end;
write(n)
end.
|
Си++ | Алгоритмический язык |
#include <iostream>
using namespacestd;
int main()
{
int n, s;
n = 10;
s = 0;
while (s <= 249)
{
s = s + 24;
n = n + 3;
}
cout « n « endl;
}
|
алг
нач
цел n, s
n := 10
s := 0
нц пока s <= 249
s := s + 24
n := n + 3
кц
вывод n
кон
|
Python |
n = 10
s = 0
while s <= 249:
s += 24
n += 3
print(n)
|
Пояснение
Цикл while выполняется до тех пор, пока истинно условие s <= 249, т. е. переменная s определяет, сколько раз выполнится цикл.
Заметим, что На 11 шаге s станет равной 264 и условие s <= 249 окажется невыполненным, цикл прервется. Следовательно, значение n будет равно 10 + 11·3 = 43.
Ваш ответ:
Вы пропустили вопрос
Вопрос 9
Документ объемом 10 Мбайт можно передать с одного компьютера на другой двумя способами:
А) Сжать архиватором, передать архив по каналу связи, распаковать
Б) Передать по каналу связи без использования архиватора.
Какой способ быстрее и насколько, если
– средняя скорость передачи данных по каналу связи составляет 218 бит в секунду,
– объем сжатого архиватором документа равен 30% от исходного,
– время, требуемое на сжатие документа – 7 секунд, на распаковку – 1 секунда?
В ответе напишите букву А, если способ А быстрее или Б, если быстрее способ Б. Сразу после буквы напишите количество секунд, насколько один способ быстрее другого.
Так, например, если способ Б быстрее способа А на 23 секунды, в ответе нужно написать Б23. Слов «секунд», «сек.», «с.» к ответу добавлять не нужно.
Пояснение
Способ А. Общее время складывается из времени сжатия, распаковки и передачи. Время передачи t рассчитывается по формуле t = Q / q, где Q — объём информации, q — cкорость передачи данных.
Найдём сжатый объём: 10 * 0,3 = 3 Мбайта
Переведём Q из Мбайт в биты: 3 Мбайта = 3 * 220 байт = 3 * 223 бит.
Найдём общее время: t = 7 с + 1 с + 3 * 223 бит / 218 бит/с = 8 + 3 * 25 с = 104 с.
Способ Б. Общее время совпадает с временем передачи: t = 10 * 223 бит / 218 бит/с = 10 * 25 с = 320 с.
Видно, что способ A быстрее на 320 - 104 = 216 с.
Ваш ответ:
Вы пропустили вопрос
Вопрос 10
Все 5-буквенные слова, составленные из букв К, О, Р, записаны в алфавитном порядке и пронумерованы. Вот начало списка:
1. ККККК
2. ККККО
3. ККККР
4. КККОК
……
Запишите слово, которое стоит под номером 182.
Пояснение
Заменим буквы К, О, Р на 0, 1, 2 (для них порядок очевиден – по возрастанию).
Выпишем начало списка, заменив буквы на цифры:
1. 00000
2. 00001
3. 00002
4. 00010
...
Полученная запись есть числа, записанные в троичной системе счисления в порядке возрастания. Тогда на 182 месте будет стоять число 181 (т. к. первое число 0). Переведём число 181 в троичную систему (деля и снося остаток справа налево):
181 / 3 = 60 (1)
60 / 3 = 20 (0)
20 / 3 = 6 (2)
6 / 3 = 2 (0)
2 / 3 = 0(2)
В троичной системе 181 запишется как 20201. Произведём обратную замену и получим РКРКО.
Ваш ответ:
Вы пропустили вопрос
Вопрос 11
Алгоритм вычисления значения функции F(n), где n — натуральное число, задан следующими соотношениями:
F(n) = n при n ≤ 2;
F(n) = F(n − 1) + 3×F(n − 2) при n > 2.
Чему равно значение функции F(6)? В ответе запишите только натуральное число.
Пояснение
Последовательно находим:
F(1) = 1;
F(2) = 2;
F(3) = 2 + 3 = 5;
F(4) = 5 + 6 = 11;
F(5) = 11 + 15 = 26;
F(6) = 26 + 33 = 59.
Таким образом, ответ F(6) = 59.
Ваш ответ:
Вы пропустили вопрос
Вопрос 12
В терминологии сетей TCP/IP маской сети называется двоичное число, определяющее, какая часть IP-адреса узла сети относится к адресу сети, а какая — к адресу самого узла в этой сети. Обычно маска записывается по тем же правилам, что и IP-адрес. Адрес сети получается в результате применения поразрядной конъюнкции к заданному IP-адресу узла и маске. По заданным IP-адресу узла и маске определите адрес сети.
IP-адрес узла: 32.128.208.64
Маска: 255.255.224.0
При записи ответа выберите из приведённых в таблице чисел четыре элемента IP-адреса сети и запишите в нужном порядке соответствующие им буквы без использования точек.
A |
B |
C |
D |
E |
F |
G |
H |
0 |
32 |
64 |
128 |
192 |
208 |
224 |
255 |
Пример. Пусть искомый IP-адрес: 192.168.128.0, и дана таблица:
A |
B |
C |
D |
E |
F |
G |
H |
128 |
168 |
255 |
8 |
127 |
0 |
17 |
192 |
В этом случае правильный ответ будет записан в виде: HBAF.
Пояснение
1. Запишем числа маски сети в двоичной системе счисления:
25510 = 1111 11112, 22410 = 1110 00002, 010 = 0000 00002.
2. Адрес сети получается в результате поразрядной конъюнкции чисел маски и чисел адреса узла (в двоичном коде). Так как конъюнкция 0 с чем-либо всегда равна 0, то на тех местах, где числа маски равны 0, в адресе узла стоит 0. Аналогично, там, где числа маски равны 255, стоит само число, так как конъюнкция 1 с любым числом всегда равна этому числу.
3. Рассмотрим конъюнкцию числа 224 с числом 208:
22410 = 1110 00002, 20810 = 1101 00002.
Результатом конъюнкции является число 110000002 = 19210.
4. Сопоставим варианты ответа получившимся числам: 32, 128, 192, 0.
Таким образом, ответ: BDEA.
Ваш ответ:
Вы пропустили вопрос
Вопрос 13
В велокроссе участвуют 459 спортсменов. Специальное устройство регистрирует прохождение каждым из участников промежуточного финиша, записывая его номер с использованием минимально возможного количества бит, одинакового для каждого спортсмена. Какой объём памяти будет использован устройством, когда промежуточный финиш прошли 160 велосипедистов? (Ответ дайте в байтах.)
Пояснение
Известно, что с помощью N бит можно закодировать 2N различных чисел. Поскольку 28 < 459 < 29 и для каждого спортсмена число бит одинаково, то для записи каждого из 459 номеров необходимо 9 бит памяти. Поэтому сообщение о 160 номерах имеет объем 160 · 9 = 1440 бит = 180 байт.
Ваш ответ:
Вы пропустили вопрос
Вопрос 14
Исполнитель Чертёжник перемещается на координатной плоскости, оставляя след в виде линии. Чертёжник может выполнять команду сместиться на (a, b), где a, b – целые числа. Эта команда перемещает Чертёжника из точки с координатами (x, y) в точку с координатами (x + a; y + b).
Например, если Чертёжник находится в точке с координатами (4, 2), то команда сместиться на (2, -3) переместит Чертёжника в точку (6, -1).
Цикл
ПОВТОРИ число РАЗ
последовательность команд
КОНЕЦ ПОВТОРИ
означает, что последовательность команд будет выполнена указанное число раз (число должно быть натуральным).
Чертёжнику был дан для исполнения следующий алгоритм (буквами n, a, b обозначены неизвестные числа, n>1):
НАЧАЛО
сместиться на (60, 100)
ПОВТОРИ n РАЗ
сместиться на (a, b)
сместиться на (33, 44)
КОНЕЦ ПОВТОРИ
сместиться на (13, 200)
сместиться на (-1, 60)
КОНЕЦ
Укажите наибольшее возможное значение числа n, для которого найдутся такие значения чисел a и b, что после выполнения программы Чертёжник возвратится в исходную точку.
Пояснение
За время работы программы Чертёжник сдвинется на вектор .
По условию также известно, что этот вектор равен (0, 0).
Таким образом имеем:
Ответом будет наибольший общий делитель чисел -72 и -360 — 72.
Ваш ответ:
Вы пропустили вопрос
Вопрос 15
На рисунке – схема дорог, связывающих города A, B, C, E, F, G, H, K, L, M. По каждой дороге можно двигаться только в одном направлении, указанном стрелкой. Сколько существует различных путей из города A в город E?
Пояснение
Начнем считать количество путей с конца маршрута – с города E. NX — количество различных путей из города А в город X, N — общее число путей.
В "Е" можно приехать из В, Е, или G, поэтому N = NE = NB + NA + N G(1)
Аналогично:
NB = NA = 1;
NA = 1;
NG = NA + NK = 2;
Подставим в формулу (1):
N = NК = 1 + 1 + 2 = 4.
Ваш ответ:
Вы пропустили вопрос
Вопрос 16
Решите уравнение 546 + x = 547.
Ответ запишите в восьмеричной системе счисления. Основание системы в ответе писать не нужно.
Ваш ответ:
Вы пропустили вопрос
Вопрос 17
В языке запросов поискового сервера для обозначения логической операции «ИЛИ» используется символ «|», а для логической операции «И» – символ «&».
В таблице приведены запросы и количество найденных по ним страниц некоторого сегмента сети Интернет.
Запрос | Найдено страниц, тыс. |
Математика & Информатика |
330 |
Математика & Физика |
270 |
Математика & (Информатика | Физика) |
520 |
Какое количество страниц (в тысячах) будет найдено по запросу
Математика & Информатика & Физика?
Считается, что все запросы выполнялись практически одновременно, так что набор страниц, содержащих все искомые слова, не изменялся за время выполнения запросов.
Пояснение
Запрос М & И также выдаёт и результаты по запросу М & И & Ф, так как второй является более узким запросом и подмножеством первого. Также и в случае с М & Ф.
То есть М & И = М & И & ¬Ф + М & И & Ф. (¬Ф — отсутствие Ф в запросе)
Также М & Ф = М & Ф & ¬И + М & Ф & И.
M & (И | Ф) = M & И & ¬Ф + М & Ф & ¬И + М & И & Ф.
Теперь можно заметить, что М & И & Ф = М & И + М & Ф - M & (И | Ф).
То есть М & И & Ф = 330 + 270 - 520 = 80.
Ваш ответ:
Вы пропустили вопрос
Вопрос 18
На числовой прямой даны два отрезка: P = [17, 40] и Q = [20, 57]. Отрезок A таков, что приведённая ниже формула истинна при любом значении переменной х:
¬(x ∈ A) →(((x ∈ P) ⋀ (x ∈ Q)) → (x ∈ A))
Какова наименьшая возможная длина отрезка A?
Пояснение
Введем обозначения: (x ∈А) ≡ A; (x ∈ P) ≡ P; (x ∈ Q) ≡ Q.
Применив преобразование импликации, получаем:
A ∨ (¬(P · Q) ∨ A).
Применив закон де Моргана и правило упрощения, получаем:
¬P ∨ ¬Q ∨ A.
Логическое ИЛИ истинно, если истинно хоть какое-то из утверждений. Выражение ¬P истинно тогда, когда x∈(- ∞,17)U(40,∞), а выражение ¬Q истинно тогда, когда x∈(–∞,20)U(57,∞). Следовательно, A должно быть истинно как минимум на отрезке [20;40]. Длина отрезка равна 40 − 20 = 20.
Ваш ответ:
Вы пропустили вопрос
Вопрос 19
В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 3, 0, 4, 6, 5, 1, 8, 2, 9, 7 соответственно, т. е. A[0] = 3, A[1] = 0 и т. д. Определите значение переменной c после выполнения следующего фрагмента этой программы (записанного ниже на разных языках программирования)
Бейсик | Python |
c = 0
FOR i = 1 TO 9
IF A(i-1) > A(i) THEN
c = c + 1
t = A(i)
A(i) = A(i-1)
A(i-1) = t
END IF
NEXT i
|
c = 0
for i in range(1,10):
if A[i-1] > A[i]:
c = c + 1
t = A[i]
A[i] = A[i-1]
A[i-1] = t
|
Паскаль | Алгоритмический язык |
c := 0;
for i := 1 to 9 do
if A[i-1] > A[i] then
begin
c := c + 1;
t := A[i];
A[i] := A[i-1];
A[i-1] := t;
end;
|
c := 0
нц для i от 1 до 9
если A[i-1] > A[i] то
c := c + 1
t := A[i]
A[i] := A[i-1]
A[i-1] := t
все
кц
|
Си++ |
c = 0;
for (int i = 1; i < 10; i++) {
if (A[i-1] > A[i]){
c++;
t = A[i];
A[i] = A[i-1];
A[i-1] = t;
}
}
|
Пояснение
Данный алгоритм меняет местами элементы с номером i и i-1, если A[i-1] > A[i], при каждой такой перестановке c увеличивается на единицу.
Сначала тройка сравнивается с нулем, поскольку тройка больше нуля они меняются местами. Аналогично шестерка меняется местами с пятёркой и единицей. Затем восьмерка меняется местами с двойкой, а девятка — с семеркой. Всего было 5 перестановок, следовательно, после исполнения данного фрагмента программы c станет равным пяти.
Ваш ответ:
Вы пропустили вопрос
Вопрос 20
Ниже на пяти языках записан алгоритм. Получив на вход число , этот алгоритм печатает два числа: и . Укажите наименьшее из таких чисел , при вводе которых алгоритм печатает сначала 3, а потом 2. Допускается диапазон значений для величин целого типа: от −231 до 231 — 1.
Бейсик | Паскаль |
DIM X, А, В, С AS INTEGER
INPUT X
А = 0: В = 0
WHILE X > 0
С = X MOD 2
IF C = 0 THEN
A = A + 1
ELSE
B = B + 1
END IF
X = X 10
WEND
PRINT А
PRINT В
|
var x, a, b, c: integer;
begin
readln(x);
a := 0; b := 0;
while x>0 do
begin
с := x mod 2;
if c = 0 then
a := a + 1
else
b := b + 1;
x := x div 10
end;
writeln(a); write(b);
end.
|
Си++ | Алгоритмический |
#include <iostream>
using namespacestd;
int main()
{
int x, a, b, c;
cin >> x;
a = 0;
b = 0;
while (x > 0) {
с = x % 2;
if (c == 0) a = a + 1;
else b = b + 1;
x = x / 10;
}
cout << a << endl << bendl;
}
|
алг
нач
цел х, а, b, с
ввод X
а := 0; b := 0
нц пока х>0
с := mod(х, 2)
если с = 0
то a := a + 1
иначе b := b + 1
все
х := div(х, 10)
кц
вывод а, не, b
кон
|
Python |
x = int(input())
a = 0
b = 0
while x > 0:
c = x % 2
if c == 0:
a += 1
else b += 1
x = x
print(a)
print(b)
|
Пояснение
Рассмотрим цикл, число шагов которого зависит от изменения переменной x:
while x > 0 do begin
...
x:= x div 10;
end;
Т. к. оператор div оставляет только целую часть от деления, то при делении на 10 это равносильно отсечению последней цифры.
Из приведенного цикла видно, что на каждом шаге от десятичной записи x отсекается последняя цифра до тех пор, пока все цифры не будут отсечены, то есть x не станет равно 0; поэтому цикл выполняется столько раз, сколько цифр в десятичной записи введенного числа.
При этом, если число x кратно двум, переменная a увеличивается на единицу, в противном случае — переменная b. Поскольку требуется ,чтобы программа напечатала сначала 3, а потом 2, необходимо, чтобы число x имело пять разрядов. Три цифры в этом числе должны быть чётные, а две — нечётные. Минимальным числом, удовлетворяющим данным условиям является число 10001.
Ваш ответ:
Вы пропустили вопрос
Вопрос 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)
|
Паскаль | Алгоритмический язык |
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.
|
алг
нач
цел i, k
ввод k
i := 1
нц пока f(i) < g(k)
i := i + 1
кц
вывод i
кон
алг цел f(цел n)
нач
знач := n * n * n
кон
алг цел g(цел n)
нач
знач := 2*n + 3
кон
|
Си++ |
#include <iostream>
using namespacestd;
long f(long n) {
return n * n * n;
}
long g(long n) {
return 2*n + 3;
}
int main()
{
long k, i;
cin >> k;
i = 1;
while(f(i) < g(k))
i++;
cout << i << endl;
return 0;
}
|
Ваш ответ:
Вы пропустили вопрос
Вопрос 22
Определите значение переменной c после выполнения следующего фрагмента программы (записанного ниже на разных языках программирования). Ответ запишите в виде целого числа.
Бейсик | Паскаль |
a = 30
b = 6
a = a * 3 / b
IF a < b THEN
c = 3*a - 5 * (b+2)
ELSE
c = 3*a + 5 * (b+2)
END IF
|
a := 30;
b := 6;
a := a * 3 / b;
if a < b then
c := 3*a - 5 *(b+2)
else
c := 3*a + 5 * (b+2);
|
Си++ | Алгоритмический язык |
a = 30;
b = 6;
a = a * 3 / b;
if (a < b)
c = 3*a - 5 * (b+2);
else
c = 3*a + 5 * (b+2);
|
a := 30
b := 6
a := a * 3 / b
если a < b
то c := 3*a - 5*(b+2)
иначе c := 3*a + 5*(b+2)
все
|
Python |
a = 30
b = 6
a = a * 3 / b
if a < b:
c = 3 * a – 5 * (b+2)
else:
c = 3 * a + 5 * (b+2)
|
Пояснение
Выполним программу:
a := 30,
b := 6,
a := a * 3 / b = 30 · 3/6 = 15.
Условие a < b не выполняется, поэтому далее выполним: c := 3*a + 5 * (b+2) = 45 + 40 = 85.
Ваш ответ:
Вы пропустили вопрос
Вопрос 23
Сколько существует различных наборов значений логических переменных x1, x2, … x6, y1, y2, … y6, которые удовлетворяют всем перечисленным ниже условиям?
(x1 → x2) ∧ (x2 → x3) ∧ (x3 → x4) ∧ (x4 → x5) ∧ (x5 → x6) = 1
(y1 → y2) ∧ (y2 → y3) ∧ (y3 → y4) ∧ (y4 → y5) ∧ (y5 → y6) = 1
(¬x1 ∨ y1) ∧ (¬x2 ∨ y2) ∧ (¬x3 ∨ y3) ∧ (¬ x4 ∨ y4) ∧ (¬x5 ∨ y5) ∧ (¬x6 ∨ y6) = 1
В ответе не нужно перечислять все различные наборы значений переменных x1, x2, … x6, y1, y2, … y6, при которых выполнена данная система равенств. В качестве ответа Вам нужно указать количество таких наборов.
Пояснение
Заметим, что первое и второе уравнения не связаны между собой ни через какие переменные.
Рассмотрим первое уравнение. Для того, чтобы равенство выполнялось, необходимо, чтобы каждая скобка была истинной. Импликация ложна только тогда, когда посылка истинна, а следствие ложно. Представим решение этого уравнения в виде дерева.
Рассмотрим второе уравнение. Чтобы равенство выполнялось, необходимо, чтобы каждая скобка была истинной. Дерево для решения этого уравнения будет выглядеть так:
Теперь рассмотрим третье уравнение. Конъюнкция истинна только, если все операнды истинны. Каждое уравнения вида ¬xN ∨ yN = 1 имеет три решения: 01, 00, 11. То есть для каждой пары xN, yN запрещены решения вида 10.
Будем представлять решения уравнений в виде набора нулей и единиц, например, решение x1 = 0, x2 = x3 =x4, = x5= x6 = 1 имеет вид 011 111. Заметим, что для первых двух уравнений в наборах решений после единицы могут стоять только единицы. То есть разрешены решения вида 001 111.
Также заметим, что если yN = 0, то xN обязательно равно единице.
Таким образом, получаем, что набору yN 111 111, могут соответствовать наборы xN: 111 111, 011 111, 001 111, 000 111, 000 011, 000 001, 000 000. Всего семь наборов.
Аналогично, набору yN 011 111 соответствует шесть наборов и так далее. Всего получаем:
7 + 6 + 5 + 4 + 3 + 2 + 1 = 28 наборов.
Ваш ответ:
Вы пропустили вопрос
Вопрос 24
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x, y — действительные числа) и определяет принадлежность точки заштрихованной области (включая границы). Программист торопился и написал программу неправильно. Ниже для Вашего удобства программа представлена на четырёх языках программирования.
Бейсик | Паскаль |
INPUT x, y
IF y<=1 THEN
IF y>=0 THEN
IF x>=-1 THEN
IF y>=x*x THEN
PRINT "принадлежит"
ELSE
PRINT "не принадлежит"
END IF
END IF
END IF
END IF
END
|
var x,y: real;
begin
readln(x,y);
if y<=1 then
if y>=0 then
if x>=-1 then
if y>=x*x then
write('принадлежит')
else
write('не принадлежит');
end.
|
Си++ | Алгоритмический |
#include <iostream>
using namespacestd;
int main()
{
float x,y;
cin >> x >> y;
if (y<=1)
if (y>=0)
if (x>=-1)
if (y>=x*x)
cout << "принадлежит";
else
cout << "не принадлежит";
}
|
алг
нач
вещ x,y
ввод x,y
если y<=1 то
если y>=0 то
если x>=-1 то
если y>=x*x то
вывод 'принадлежит'
иначе
вывод 'не принадлежит'
все
все
все
все
кон
|
Python |
x,y = float(input()), float(input())
if y<=1:
if y>=0:
if x>=-1:
if y>=x*x:
print("принадлежит")
else:
print("не принадлежит")
|
Последовательно выполните следующее.
1. Перерисуйте и заполните таблицу, которая показывает, как работает программа при аргументах, принадлежащих различным областям (A, B, C, D, E, F, G, H, I, J, K). Точки, лежащие на границах областей, отдельно не рассматривать. Координатные оси не являются границами областей. В столбцах условий укажите «да», если условие выполнится, «нет», если условие не выполнится, «—» (прочерк), если условие не будет проверяться, «не изв.», если программа ведёт себя по-разному для разных значений, принадлежащих данной области. В столбце «Программа выведет» укажите, что программа выведет на экран. Если программа ничего не выводит, напишите «—» (прочерк). Если для разных значений, принадлежащих области, будут выведены разные тексты, напишите «не изв.». В последнем столбце укажите «да» или «нет».
Область |
Условие1 (y<=1) |
Условие 2 (y>=0) |
Условие 3
(x>=−1)
|
Условие 4 (y>=x*x) |
Программа
выведет
|
Область обрабатывается
верно
|
A |
|
|
|
|
|
|
В |
|
|
|
|
|
|
С |
|
|
|
|
|
|
D |
|
|
|
|
|
|
Е |
|
|
|
|
|
|
F |
|
|
|
|
|
|
G |
|
|
|
|
|
|
Н |
|
|
|
|
|
|
I |
|
|
|
|
|
|
J |
|
|
|
|
|
|
2. Укажите, как нужно доработать программу, чтобы не было случаев её неправильной работы. (Это можно сделать несколькими способами, достаточно указать любой способ доработки исходной программы.)
Пояснение
Элементы ответа:
Область |
Условие1 (y<=1) |
Условие 2 (y>=0) |
Условие 3
(x>=−1)
|
Условие 4 (y>=x*x) |
Программа
выведет
|
Область обрабатывается верно |
A
|
нет |
— |
— |
— |
— |
нет |
B |
нет |
— |
— |
— |
— |
нет |
C |
нет |
— |
— |
— |
— |
нет |
D |
нет |
— |
— |
— |
— |
нет |
E |
да |
да |
нет |
— |
— |
нет |
F |
да |
да |
да |
да |
принадлежит |
да |
G |
да |
да |
да |
нет |
не принадлежит |
да |
H |
да |
нет |
— |
— |
— |
нет |
I |
да |
нет |
— |
— |
— |
нет |
J |
да |
да |
да |
нет |
не принадлежит |
нет |
Возможная доработка (Паскаль, отдельно рассматриваем области, лежащие по разные стороны от прямой x=0):
if (y>=x*x) and (y<=1) and (x>=0) or (x<=0) and (x>=-1) and (y>=0) and (y<=1) then
write('принадлежит')
else write('не принадлежит')
Возможная доработка (Си, отдельно рассматриваем области, лежащие по разные стороны от параболы):
if((y>=x*x) && (y<=1) || (y<=x*x) && (x>=-1) && (y>=0))
cout << "принадлежит";
else
cout << "не принадлежит";
Обратите внимание! При разделении области вдоль какой-либо линии точки, которые лежат на этой линии внутри области, могут быть причислены к одной части, к другой или к обеим (то есть, например, в приведённом решении на языке Паскаль одно из условий (x>=0 или x<=0) может быть строгим). Могут быть и другие верные способы доработки.
Ваш ответ:
Вы пропустили вопрос
Вопрос 25
Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от –10 000 до 10 000 включительно. Опишите
на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых хотя бы одно число делится на 13. В данной задаче под парой подразумевается два подряд идущих элемента массива. Например, для массива из пяти элементов: 6; 2; 13; –26; 14 — ответ: 3.
Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования и естественного языка. Запрещается использовать переменные, не описанные ниже, но разрешается
не использовать некоторые из описанных переменных.
Бейсик | 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()))
...
|
Паскаль | Алгоритмический язык |
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.
|
алг
нач
цел N = 20
целтаб a[1:N]
цел i, j, k
нц для i от 1 до N
ввод a[i]
кц
...
кон
|
Си | Естественный язык |
#include
#define N 20
int main() {
int a[N];
int i, j, k;
for (i = 0; i < N; i++)
cin >> 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 do
if (a[i] mod 13=0) or (a[i+1] mod 13=0) then
inc(k);
writeln(k);
|
Алгоритмический язык |
k := 0;
нц для i от 1 до N-1
если mod(a[i],13)=0 или mod(a[i+1],13)=0
то
k := k+1
все
кц
вывод k
|
Бейсик |
K = 0
FOR I = 1 TO N-1
IF (A(I) MOD 13 = 0) OR (A(I + 1) MOD 13 = 0) THEN
K = K+1
END IF
NEXT I
PRINT K
|
Python |
k = 0
for i in range(0, n – 1):
if (a[i] % 13 == 0 or a[i + 1] % 13 == 0):
k +=1
print(k)
|
Си |
k = 0;
for (i = 0; i < N-1; i++)
if (a[i]%13 == 0 || a[i+1]%13 == 0)
k++;
cout « k « endl;
|
Естественный язык |
Записываем в переменную K начальное значение, равное 0. В цикле от первого элемента до предпоследнего находим остаток от деления текущего и следующего элемента массива на 13. Если первый или второй из полученных остатков равен 0, увеличиваем переменную K на единицу. После завершения цикла выводим значение переменной K |
Ваш ответ:
Вы пропустили вопрос
Вопрос 26
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один или два камня или увеличить количество камней в куче в два раза. Например, имея кучу из 15 камней, за один ход можно получить кучу из 16, 17 или 30 камней. У каждого игрока, чтобы делать ходы, есть неограниченное количество камней.
Игра завершается в тот момент, когда количество камней в куче становится не менее 44. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 44 или больше камней. В начальный момент в куче было S камней, 1 ≤ S ≤ 43.
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Описать стратегию игрока — значит описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при различной игре противника.
Выполните следующие задания. Во всех случаях обосновывайте свой ответ.
1. а) Укажите все такие значения числа S, при которых Петя может выиграть в один ход. Обоснуйте, что найдены все нужные значения S, и укажите выигрывающий ход для каждого указанного значения S.
б) Укажите такое значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом. Опишите выигрышную стратегию Вани.
2. Укажите два таких значения S, при которых у Пети есть выигрышная стратегия, причём (а) Петя не может выиграть за один ход и (б) Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня. Для каждого указанного значения S опишите выигрышную стратегию Пети.
3. Укажите значение S, при котором:
— у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети, и
— у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.
Для указанного значения S опишите выигрышную стратегию Вани. Постройте дерево всех партий, возможных при этой выигрышной стратегии Вани (в виде рисунка или таблицы). На рёбрах дерева указывайте, кто делает ход, в узлах — количество камней в куче.
Пояснение
1. а) Петя может выиграть, если S = 22, ... 43. Во всех этих случаях достаточно удвоить количество камней. При меньших значениях S за один ход нельзя получить кучу, в которой больше 43 камней.
б) Ваня может выиграть первым ходом (как бы ни играл Петя), если исходно в куче будет S = 21 камней. Тогда после первого хода Пети в куче будет 22, 23 или 42 камня. Во всех случаях Ваня удваивает количество камней и выигрывает первым ходом.
2. Возможные значения S: 19, 20. В этих случаях Петя, очевидно, не может выиграть первым ходом. Однако он может получить кучу из 21 камня: в первом случае добавлением двух камней, во втором добавлением одного камня. Эта позиция разобрана в п. 16. В ней отрок, который будет ходить (теперь это Ваня), выиграть не может, а его противник (то есть Петя) следующим ходом выиграет.
3. Возможное значение S: 18. После первого хода Пети в куче будет 19, 20 или 36 камней. Если в куче станет 38 камней. Ваня удвоит количество камней и выиграет первым ходом. Ситуация, когда в куче 19 или 20 камней, уже разобрана в п. 2. В этих ситуациях игрок, который будет ходить (теперь это Ваня), выигрывает своим вторым ходом.
В таблице изображено дерево возможных партий при описанной стратегии Ванн. Заключительные позиции (в них выигрывает Ваня) подчёркнуты. На рисунке это же дерево изображено в графическом виде (оба способа изображения дерева допустимы).
Ваш ответ:
Вы пропустили вопрос
Вопрос 27
На вход программы поступает последовательность из N целых положительных чисел, все числа в последовательности различны. Рассматриваются все пары различных элементов последовательности, находящихся на расстоянии не меньше чем 4 (разница в индексах элементов пары должна быть 4 или более, порядок элементов в паре неважен). Необходимо определить количество таких пар, для которых произведение элементов делится на 29.
Описание входных и выходных данных
В первой строке входных данных задаётся количество чисел N (4 ≤ N ≤ 1000). В каждой из последующих N строк записано одно целое положительное число, не превышающее 10 000.
В качестве результата программа должна вывести одно число: количество пар элементов, находящихся в последовательности на расстоянии не меньше чем 4, в которых произведение элементов кратно 29.
Пример входных данных:
7
58
2
3
5
4
1
29
Пример выходных данных для приведённого выше примера входных данных:
5
Пояснение. Из 7 заданных элементов с учётом допустимых расстояний между ними можно составить 6 произведений: 58 · 4, 58 · 1, 58 · 29, 2 · 1, 2 · 29, 3 · 29. Из них на 29 делятся 5 произведений.
Требуется написать эффективную по времени и по памяти программу для решения описанной задачи.
Программа считается эффективной по времени, если при увеличении количества исходных чисел N в k раз время работы программы увеличивается не более чем в k раз.
Программа считается эффективной по памяти, если память, необходимая для хранения всех переменных программы, не превышает 1 Кбайт и не увеличивается с ростом N.
Максимальная оценка за правильную (не содержащую синтаксических ошибок и дающую правильный ответ при любых допустимых входных данных) программу, эффективную по времени и по памяти, – 4 балла.
Максимальная оценка за правильную программу, эффективную только по времени – 3 балла.
Максимальная оценка за правильную программу, не удовлетворяющую требованиям эффективности, – 2 балла.
Вы можете сдать одну программу или две программы решения задачи (например, одна из программ может быть менее эффективна). Если Вы сдадите две программы, то каждая из них будет оцениваться независимо от другой, итоговой станет бо́льшая из двух оценок.
Перед текстом программы обязательно кратко опишите алгоритм решения. Укажите использованный язык программирования и его версию.
Пояснение
Произведение двух чисел делится на 29, если хотя бы один из сомножителей делится на 29.
При вводе чисел можно подсчитывать количество чисел, кратных 29, не считая четырёх последних. Обозначим их n29.
Примечание для проверяющего. Сами числа, кроме четырёх последних, при этом можно не хранить.
Очередное считанное число будем рассматривать как возможный правый элемент искомой пары. Если очередное считанное число делится на 29, то к ответу следует прибавить количество чисел до него, не считая четырёх последних (включая считанное). Если очередное считанное число на 29 не делится, то к ответу следует прибавить n29.
Чтобы построить программу, эффективную по памяти, заметим, что, поскольку при обработке очередного элемента входных данных используются значения, находящиеся на четыре элемента ранее, достаточно хранить только четыре последних элемента или информацию о них. Ниже приведена реализующая описанный алгоритм программа на языке Паскаль (использована версия PascalABC).
Пример 1. Программа на языке Паскаль. Программа эффективна по времени и памяти.
const s = 4; {требуемое расстояние между элементами}
var
n: longint;
a: array[1..s] of longint; {хранение последних s значений}
a_: longint; {очередное значение}
n29: longint; {количество делящихся на 29 элементов, не считая s последних}
cnt: longint; {количество искомых пар}
i, j: longint;
begin
readln(n); {Ввод первых s чисел}
for i:=1 to s do
readln(a[i]); {Ввод остальных значений, подсчет искомых пар}
cnt := 0;
n29 := 0;
for i := s + 1 to n do
begin
if a[1] mod 29 = 0 then
n29 := n29 + 1;
readln(a_);
if a_ mod 29 = 0 then
cnt := cnt + i - s
else
cnt := cnt + n29;
{сдвигаем элементы вспомогательного массива влево}
for j := 1 to s - 1 do
a[j] := a[j + 1];
a[s] := a_ {записываем текущий элемент в конец массива}
end;
writeln(cnt)
end.
Пример 2. Программа на языке Python. Программа эффективна по времени и памяти.
s = 4
a = [0]*s
n = int(input())
for i in range(s):
a[i] = int(input())
cnt = 0
n29 = 0
for i in range(s, n):
k = i % s
if a[k] % 29 == 0:
n29 = n29 + 1
a_ = int(input())
if a_ % 29 == 0:
cnt = cnt + i - s + 1
else:
cnt = cnt + n29
a[i % s] = a_
print(cnt)
Пример 3. Программа на языке С++. Программа эффективна по времени и памяти.
#include
using namespace std;
int main()
{
int s = 4; //требуемое расстояние между элементами
int n;
int n1 = 0, n2 = 0, n3 = 0, n4 = 0;
//хранение последних s счетчиков
int a_; // очередное значение
int cnt; // количество искомых пар
cin >> n;
cnt = 0;
for (int i = 0; i < n; ++i)
{
cin >> a_; // считано очередное значение
if (i >= s)
{
if (a_ % 29 == 0)
cnt += i - s + 1;
else
cnt += n4;
}
//сдвигаем элементы счетчиков
n4 = n3;
n3 = n2;
n2 = n1;
//обновляем счетчик кратных 29
if (a_ % 29 == 0)
n1 += 1;
}
cout << cnt;
return 0;
}
Пример 4. Программа на языке Паскаль. Программа эффективна по времени и неэффективна по памяти.
const s = 4; {требуемое расстояние между элементами}
var
n: longint;
a: array[1..1000] of longint;
n29: longint;
{количество делящихся на 29 элементов, не считая s последних}
cnt: longint; {количество искомых пар}
i, j: longint;
begin
readln(n);
{Ввод первых s чисел}
for i:=1 to s do
readln(a[i]);
{Ввод остальных значений, подсчет искомых пар}
cnt := 0;
n29 := 0;
for i := s + 1 to n do
begin
readln(a[i]);
if a[i - s] mod 29 = 0 then
n29 := n29 + 1;
if a[i] mod 29 = 0 then
cnt := cnt + i - s
else
cnt := cnt + n29;
end;
writeln(cnt)
end.
Ваш ответ:
Вы пропустили вопрос