Вы отправили работу на проверку эксперту. Укажите номер телефона на него придет СМС
Скачать .pdf

Демонстрационный по информатике

Часть 1.

Ответами к заданиям 1–23 являются число или последовательность цифр. Запишите ответ справа от номера задания без пробелов, запятых и других дополнительных символов.

1
1

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

2
2

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













Перем. 1Перем. 2Перем. 3Функция
?????????F
0000
0011
0100
0111
1000
1010
1100
1111

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


Пример. Пусть задано выражение x → y, зависящее от двух переменных x и y, и таблица истинности:









Перем. 1Перем. 2Функция
??????F
001
010
101
111

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

3
3

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


Демонстрационный по информатике


Демонстрационный по информатике


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

4
4

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



















Таблица 1
IDФамилия_И.О.Пол
2146Кривич Л.П.ж
2155Павленко А.К.м
2431Хитруг П.А.м
2480Кривич А.А.ж
2302Павленко Е.А.ж
2500Сокол Н.А.м
3002Павленко И.А.ж
2523Павленко Т.Х.ж
2529Хитрук А.П.м
2570Павленко П.И.м
2586Павленко Т.И.ж
2933Симонян А.А.ж
2511Сокол В.А.ж
3193Биба С.А.ж


















Таблица 2
ID_родителяID_ребенка
21462302
21463002
21552302
21553002
23022431
23022511
23023193
30022586
30022570
25232586
25232570
25292431
25292511
25293193
5
5

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


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

6
6

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


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


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


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


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


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


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

7
7

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








ABCDE
1404400707
2303300606
32022005
410110040=$B2 * C$3

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

8
8

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

Бейсик

DIM S, N AS INTEGER
S = 0
N = 0
WHILE S < 111
    S = S + 8
    N = N + 2
WEND
PRINT N

Python

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<stdio.h>
int main()
{     int s = 0, n = 0;
    while (s < 111) { s = s + 8; n = n + 2; }
    printf("%d\n", n);
    return 0;
}
9
9

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

10
10

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

11
11

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


Бейсик


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

Python


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)?

12
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. Чему равно наименьшее возможное значение третьего слева байта маски? Ответ запишите в виде десятичного числа.

13
13

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

14
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)
    КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ

15
15

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


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


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


Демонстрационный по информатике

16
16

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

17
17

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


В таблице приведены запросы и количество найденных по ним страниц некоторого сегмента сети Интернет.







ЗапросНайдено страниц (в тыс)
Гомер & Илиада200
Гомер & (Одиссея | Илиада)470
Гомер & Одиссея355

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


Гомер & Одиссея & Илиада?


Считается, что все запросы выполнялись практически одновременно, так что набор страниц, содержащих все искомые слова, не изменялся за время выполнения запросов.

18
18

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


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


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


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

19
19

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


Бейсик


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

Python


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;
    }
20
20

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



Бейсик


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

Python


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<stdio.h>
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);
}
21
21

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


Бейсик


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

Python


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<stdio.h>
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)<g(k))
        i++;
    printf("%ld", i);
    return 0;
}
22
22

Исполнитель Май15 преобразует число на экране.


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


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


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


Первая команда увеличивает число на экране на 1, вторая умножает его на 2.


Программа для исполнителя Май15 – это последовательность команд.


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


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

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

23
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, при которых выполнена данная система равенств. В качестве ответа Вам нужно указать количество таких наборов.

 

Часть 2.

Запишите сначала номер задания (24, 27 и т. д.), затем полное решение. Ответы записывайте чётко и разборчиво.

24

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


Бейсик


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

Python


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 <stdio.h>
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);
    return 0;
}

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


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.


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


Бейсик


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

Python


# допускается также
# использовать две
# целочисленные переменные 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 <stdio.h>
#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 do
    if (a[i] mod 3=0) or (a[i+1] mod 3=0) then
        inc(k);
writeln(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
    IF (A(I) MOD 3 = 0) OR (A(I + 1) MOD 3 = 0) THEN
        K = K+1
    END IF
NEXT I
PRINT K

Си


k = 0;
for (i = 0; i<N-1; i++)
    if (a[i]%3 == 0 a[i+1]%3 == 0)
        k++;
printf("%d", 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. В цикле от первого элемента до предпоследнего находим остаток от деления текущего и следующего элемента массива на 3. Если первый или второй из полученных остатков равен 0, увеличиваем переменную K на единицу. После завершения цикла выводим значение переменной K

Общие указания.


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


2. Эффективность алгоритма не имеет значения и не оценивается.


3. Допускается запись алгоритма на языке программирования, отличном от языков, перечисленных в условии. В этом случае должны использоваться переменные, аналогичные описанным в условии. Если язык программирования использует типизированные переменные, описания переменных должны быть аналогичны описаниям переменных на естественном языке. Использование нетипизированных или необъявленных переменных возможно только в случае, если это допускается языком программирования; при этом количество переменных и их идентификаторы должны соответствовать условию задачи.

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) укажите, кто из игроков имеет выигрышную стратегию. Опишите выигрышную стратегию; объясните, почему эта стратегия ведёт к выигрышу, и укажите, какое наибольшее количество ходов может потребоваться победителю для выигрыша при этой стратегии. Постройте дерево всех партий, возможных при указанной Вами выигрышной стратегии. Представьте дерево в виде рисунка или таблицы.

Показать ответ

Содержание верного ответа


Демонстрационный по информатике


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


Демонстрационный по информатике


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


Примечание для эксперта. В некоторых позициях у Вани есть и другой способ выигрыша: например, в позиции (8, 64) можно добавить один камень в любую кучу. То, что это не указано, не является ошибкой. Экзаменуемый не должен указывать все возможные выигрышные стратегии.

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 элементов и циклически заполнять его по мере ввода данных. Размер этого массива не зависит от общего количества введённых показаний, поэтому такое решение будет эффективным не только по времени, но и по памяти. Чтобы хранить абсолютный и чётный минимумы, нужно использовать два таких массива.


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


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.
0 из 0
Ваш ответ Правильный ответ Первичный балл

Здесь появится результат тестовой части.

Нажмите на кнопку «Завершить работу», чтобы увидеть правильные ответы.