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

Вариант 2

Часть 1.

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

1
1

Сколько единиц в двоичной записи восьмеричного числа 20768?

2
2

Между населёнными пунктами А, В, С, D, Е, F построены дороги, протяжённость которых в километрах приведена в таблице. (Отсутствие числа в таблице означает, что прямой дороги между пунктами нет.)

ABCDEF
A157111
B1
C523
D7232
E139
F11329

Определите длину кратчайшего пути между пунктами А и F (при условии, что передвигаться можно только по построенным дорогам). В ответе укажите только число.

3
3

Каждое из логических выражений F и G содержит 7 переменных. В таблицах истинности выражений F и G есть ровно 7 одинаковых строк, причём ровно в 6 из них в столбце значений стоит 0.

Сколько строк таблицы истинности для выражения F ∧ G содержит 0 в столбце значений?

4
4

Ниже представлены две таблицы из базы данных. Каждая строка таблицы 2 содержит информацию о ребёнке и об одном из его родителей. Информация представлена значением поля ID в соответствующей строке таблицы 1. Определите на основании приведённых данных ID племянницы Гречко М.И.

Пояснение: племянницей считается дочь брата или сестры.

Таблица 1
IDФамилия_И.О.Пол
17Гречко Н.АЖ
24Гречко И.ММ
25Гречко М.ИМ
26Гречко М.ММ
34Лагидзе А.ИЖ
35Лагидзе В.С.Ж
37Лагидзе С.СМ
44Гольдони А.СЖ
45Голдони Л.АМ
46Гланц О.СМ
48Гланц М.ОМ
54Гаранян А.МЖ
75Михейко М.АЖ
......
Таблица 2
ID_родителяID_ребенка
2425
4425
2526
7526
2434
4434
3435
3735
1737
3446
3746
2554
7554
...
5
5

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

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

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

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

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

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

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

6
6

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

ABCDE
1404100709
23036010
3= $B3 * B$223005011
41014004012

Из ячейки АЗ в ячейку С2 была скопирована формула. При копировании адреса ячеек в формуле автоматически изменились. Каким стало числовое значение формулы в ячейке С2?

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

7
7

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

8
8

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

Бейсик

DIM S, N AS INTEGER<br />S = 0<br />N = 0<br />WHILE S < 65<br />    S = S + 6<br />    N = N + 2<br />WEND<br />PRINT N<br />

Pyhon

s = 0<br />n = 0<br />while s < 65:<br />    s = s + 6<br />    n = n + 2<br />print (n)<br />

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

алг<br />нач<br />    цел n, s<br />    n := 0<br />    s : = 0<br />    нц пока s < 65<br />        s : = s + 6<br />        n : = n + 2<br />    кц<br />    вывод n<br />кон<br />

Паскаль

var s, n: integer;<br />begin<br />    s : = 0;<br />    n : = 0;<br />    while s < 65 do<br />    begin<br />        s : = s + 6;<br />        n : = n + 2<br />    end;<br />    writeln (n)<br />end.<br />

Си

#include<stdio.h><br />int main()<br />{ int s = 0, n = 0;<br />    while (s < 65) { s=s+6; n=n+2;}<br />    printf("%d\n", n);<br />    return 0;<br />}<br />
9
9

Для кодирования некоторой последовательности, состоящей из букв А, Б, В и Г, решили использовать неравномерный двоичный код, позволяющий однозначно декодировать двоичную последовательность, появляющуюся на приёмной стороне канала связи. Для букв А, Б, В используются такие кодовые слова: А — 010, Б — 1, В — 011. Укажите кратчайшее кодовое слово для буквы Г, при котором код будет допускать однозначное декодирование. Если таких кодов несколько, укажите код с наименьшим числовым значением.

10
10

Шифр кодового замка представляет собой последовательность из пяти символов, каждый из которых является цифрой от 1 до 5. Сколько различных вариантов шифра можно задать, если известно, что цифра 1 может встречаться ровно три раза, а каждая из других допустимых цифр может встречаться в шифре любое количество раз или не встречаться совсем?

11
11

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

Бейсик

SUB F(n)<br />    PRINT n <br />    IF n > 2 THEN <br />        F(n - 1)<br />        F (n - 2)<br />        F (n - 3)<br />    END IF <br />END SUB<br />

Pyhon

def F(n):<br />    print(n, end='') <br />    if n > 2:<br />        F (n - 1)<br />        F (n - 2)<br />        F(n - 3)<br />

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

алг F(цел n) <br />нач<br />    вывод n <br />    если n > 2 то <br />        F (n - 1)<br />        F (n - 2)<br />        F (n - 3) <br />    все <br />кон<br />

Паскаль

procedure F(n: integer); <br />begin<br />    write (n); <br />    if n > 2 then <br />    begin<br />        F(n - 1);<br />        F(n - 2);<br />        F(n - 3) <br />    end <br />end;<br />

Си

void F(int n) <br />    { printf("%d", n) ; <br />    if (n > 2) {<br />        F(n - 1) ;<br />        F(n - 2) ;<br />        F(n - 3) ;<br />    }<br />}<br />

Что выведет программа при вызове F(4)? В ответе запишите последовательность выведенных цифр слитно (без пробелов).

12
12

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

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

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

13
13

При регистрации в компьютерной системе каждому пользователю выдаётся пароль, состоящий из 15 символов и содержащий только символы из 6-символьного набора: А, В, С, D, Е, F. В базе данных для хранения сведений о каждом пользователе отведено одинаковое и минимально возможное целое число байт. При этом используют посимвольное кодирование паролей, все символы кодируют одинаковым и минимально возможным количеством бит.

Кроме собственно пароля, для каждого пользователя в системе хранятся дополнительные сведения, для чего выделено целое число байт; это число одно и то же для всех пользователей. Для хранения сведений о 50 пользователях потребовалось 1000 байт. Сколько байт выделено для хранения дополнительных сведений об одном пользователе? В ответе запишите только целое число — количество байт.

14
14

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

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

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

преобразует строку 12555550 в строку 1263550.

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

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

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

Цикл

ПОКА условие

    

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

КОНЕЦ ПОКА

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

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

ЕСЛИ условие

    

ТО команда 1

    

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

КОНЕЦ ЕСЛИ

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

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

НАЧАЛО

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

    

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

        

ТО заменить (888, 9)

        

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

    

КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

15
15

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

16
16

Значение арифметического выражения: 162016 + 42015 — 64 — записали в системе счисления с основанием 4. Сколько цифр «3» содержится в этой записи?

17
17

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

ЗапросНайдено страниц (в тыс)
Сосна & Ель & Кедр70
Сосна & Ель240
Сосна & Кедр340

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

Сосна & (Ель | Кедр)?

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

18
18

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

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

х&А ≠ 0 → (х&З6 = 0 → х&6 ≠ 0)

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

19
19

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

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

Бейсик

с = 0<br />FOR i = 0 ТО 8<br />    IF А(i) >= А(9) THEN<br />    с = с + 1<br />    t = А (i)<br />    A (i) = А (9)<br />    А ( 9) = t <br />    ENDIF<br />NEXT i<br />

Pyhon

c = 0<br />for i in range(0,9):<br />    if A[i] >= A[9]:<br />    c = c + 1<br />    t = A [ i ]<br />    A [ i ] = A [ 9 ]<br />    A [ 9 ] = t<br />

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

с : = 0<br />нц для i от 0 до 8<br />    если A[i] >= А[9] то<br />        с : = с + 1<br />        t := A[i]<br />        A[i] := А[9]<br />        А[9] := t<br />    все<br />кц<br />

Паскаль

c : = 0;<br />for i := 0 to 8 do<br />    if A[i] >= A[9] then<br />    begin<br />        c : = c + 1;<br />        t : = A [ i ] ;<br />        A[i] := A[9];<br />        A[9] := t;<br />    end;<br />

Си

с = 0 ; с = 0 ;<br />for (i = 0; i < 9; i++)<br />    if (A[i] >= A[9])<br />    {<br />    c++;<br />    t = A [i] ;<br />    A [i] = A [9] ; <br />    A [9] = t;<br />}<br />
20
20

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

Бейсик

DIM X, L, М AS INTEGER<br />INPUT X<br />L = X<br />M = 12<br />IF L MOD 2=0 THEN<br />    M = 24<br />ENDIF<br />WHILE L О M<br />IF L > M THEN<br />    L = L - M<br />ELSE<br />    M = M - L<br />ENDIF<br />WEND<br />PRINT M<br />

Pyhon

х = int(input())<br />L = х<br />M = 12<br />if L % 2 == 0:<br />    M = 24<br />while L != M:<br />    if L > M:<br />        L = L - M<br />    else:<br />        M = M - L<br />print(M)<br />

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

алг<br />нач<br />    цел х, L, М<br />    ввод X<br />    L : = х<br />    М := 12<br />    если mod(L, 2)=0<br />        то<br />            М := 24<br />    все<br />    нц пока L <> М<br />        если L > М<br />        то<br />            L : = L - М<br />        иначе<br />            М := М - L<br />        все<br />    кц<br />    вывод М<br />кон<br />

Паскаль

var x, L, M: integer;<br />begin<br />    readln(x);<br />    L : = x;<br />    M := 12;<br />    if L mod 2=0 then<br />        M := 24;<br />    while L <> M do<br />        if L > M then<br />            L := L - M<br />        else<br />            M := M - L;<br />    writeln(M);<br />end.<br />

Си

#include<stdio.h> void main()<br />{<br />    int x, L, M;    <br />    scanf ("%d",    &x) ;<br />    L = x;        <br />    M = 12;        <br />    if (L %    2 ==     0)<br />        M = 24    <br />    while (L    != M) {<br />        if (L > M)    <br />            L =    L - M;<br />        else        <br />            M =    M -    L;<br />    }        <br />    printf("%d", M) ;<br />}<br />

21
21

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

Бейсик

DIM К, I AS LONG<br />INPUT К<br />I = I<br />WHILE F(I) < G(K)<br />    I = I + 1<br />WEND <br />PRINT I<br /><br />FUNCTION F(N)<br />    F = N * N * N<br />END FUNCTION<br /><br />FUNCTION G(N)<br />    G = 3*N - 2<br />END FUNCTION<br />

Pyhon

def f(n):<br />    return n * n * n<br /><br />def g(n):<br />    return 3 * n - 2<br /><br />k = int(input()) <br />i = 1<br />while f(i) < g (k) :<br />    i += 1<br />print (i)<br />

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

алг<br />нач<br />    цел i, k <br />    ввод k<br />    i : = 1<br />    нц пока f(i) < g (k)<br />        i := i + 1<br />    кц<br />    вывод i<br />KOH<br /><br />алг цел f(цел n)<br />нач<br />    знач := n * n * n<br />кон<br /><br />алг цел g(цел n)<br />нач<br />    знач := 3 * n - 2<br />кон<br />

Паскаль

var<br />    k, i : longint;<br /><br />function f(n: longint): longint;<br />begin<br />    f : = n * n * n;<br />end;<br /><br />function g(n: longint): longint;<br />begin<br />    g := 3 * n - 2;<br />end;<br /><br />begin<br />    readln(k); <br />    i : = 1;<br />    while f(i) < g(k) do<br />        i : = i + 1;<br />    writeln(i)<br />end.<br />

Си

#include<stdio.h> <br />long f (long n) { <br />    return n * n * n;<br />}<br />long g(long n) { <br />    return 3 * n - 2;<br />}<br />int main()<br />{<br />    long k, i;<br />    scant("%ld", &k);<br />    i = 1;<br />    while (f (i) < g (k) )<br />        i + +;<br />    printf("%ld", i); <br />    return 0;<br />}<br />
22
22

Исполнитель Увеличитель преобразует число на экране.

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

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

2. Прибавить 3

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

Программа для исполнителя Увеличитель — это последовательность команд.

Сколько существует программ, для которых при исходном числе 1 результатом является число 15 и при этом траектория вычислений содержит число 10 и не содержит число 12?

Траектория вычислений программы — это последовательность результатов выполнения всех команд программы. Например, для программы 112 при исходном числе 5 траектория будет состоять из чисел 6, 7, 10.

23
23

Сколько существует различных наборов значений логических переменных x1, х2, ... x12, которые удовлетворяют всем перечисленным ниже условиям?

(¬x1 ∧ x2 ∧ x3) v (x1 ∧ ¬x2 ∧ x3) = 1

(¬x2 ∧ x3 ∧ x4) v (x2 ∧ ¬x3 ∧ x4) = 1

...

(¬x10 ∧ x11 ∧ x12) v (x10 ∧ ¬x11 ∧ x12) v (x10 ∧ x11 ∧ ¬x12) = 1

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

 

Часть 2.

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

24

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

Бейсик

DIM N, DIGIT, SUM AS LONG<br />INPUT N<br />SUM = 0<br />WHILE N > 10<br />    DIGIT = N MOD 10<br />    IF DIGIT MOD 3=0 THEN<br />        SUM = SUM + DIGIT<br />    END IF<br />    N = N \ 10<br />WEND<br />IF SUM > 0 THEN<br />    PRINT SUM<br />ELSE<br />    PRINT "NO"<br />END IF<br />

Python

N = int (input())<br />sum = 0<br />while N > 10:<br />    digit = N % 10<br />    if digit % 3 == 0:<br />        sum = sum + digit<br />    N = N // 10<br />if sum > 0:<br />    print(sum)<br />else:<br />    print("NO")<br />

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

алг<br />нач<br />    цел N, digit, sum<br />    ввод N<br />    sum ':= 0<br />    нц пока N > 10<br />        digit := mod(N,10)<br />        если mod(digit, 3) = 0 то<br />            sum := sum + digit<br />        все<br />        N := div(N,10)<br />    кц<br />    если sum > 0 то<br />        вывод sum<br />    иначе<br />        вывод "NO"<br />    все<br />кон<br />

Паскаль

var N, digit, sum: longint;<br />begin<br />    readln(N);<br />    sum := 0;<br />    while N > 10 do<br />    begin<br />        digit := N mod 10;<br />        if digit mod 3=0 then<br />            sum := sum + digit;<br />        N := N div 10;<br />    end;<br />    if sum > 0 then<br />        writeln(sum)<br />    else<br />        writeln('NO')<br />end.<br />

Си

#include <stdio.h> <br />int main()<br />{<br />    int N, digit, sum; <br />    scant("%d", &N); <br />    sum = 0; <br />    while (N > 10)<br />    {<br />        digit = N % 10; <br />        if (digit % 3 == 0) <br />            sum = sum + digit; <br />        N = N / 10;<br />    }<br />    if (sum > 0)<br />        printf("%d",sum); <br />    else<br />        printf("NO");<br />    return 0;<br />}<br />

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

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

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

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

Для каждой ошибки:

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

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

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

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

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

Решение использует запись программы на Паскале. Допускается использование программы на любом из четырёх других языков программирования. Программа выведет «NO». Программа выдаёт правильный ответ, например, для числа 600 или 561. Программа работает неправильно из-за неверного условия цикла и неправильной проверки на некратность 3. Соответственно, программа будет работать верно, если сумма всех цифр, кратных 3, без учёта цифры старшего разряда, равна сумме всех цифр числа, не кратных 3. В программе есть две ошибки. Первая ошибка. Неверное условие цикла Строка с ошибкой:
while N > 10 do 
Верное исправление:
while N > 0 do 
или
while N >= 1 do
Вторая ошибка. Неправильная проверка на некратность трём. Строка с ошибкой:
if digit mod 3=0 then 
Верное исправление:
if digit mod 3 <> 0 then
25

Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от -10 000 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых хотя бы одно число не делится на 7. В данной задаче под парой подразумевается два подряд идущих элемента массива. Например, для массива из пяти элементов: 13; 7; 26; -1; 9 — ответ: 2.

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

Бейсик

CONST N AS INTEGER = 30 <br />DIM A (1 TO N) AS INTEGER <br />DIM I AS INTEGER,<br />    J AS INTEGER,<br />    К AS INTEGER<br /><br />FOR I = 1 TO N <br />    INPUT A(I)<br />NEXT I<br />...<br />END<br />

Python

# допускается также<br /># использовать две<br /># целочисленные переменные j и к <br />а = [ ]<br />n = 30<br />for i in range(0, n): <br />    a.append(int(input()))<br />...<br />

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

алг<br />нач<br />    цел N = 30 <br />    целтаб а[1:N] <br />    цел i, j, k <br />    нц для i от 1 до N <br />        ввод а[i] <br />    кц<br />    ...<br />кон<br />

Паскаль

const <br />    N = 30; <br />var<br />    a: array [1..N] of integer; i, j, k: integer; <br />begin<br />    for i := 1 to N do <br />        readln(a[i]);<br />    ...<br />end.<br />

Си

#include <stdio.h><br />#define N 30 <br />int main() { <br />    int a[N]; <br />    int i, j, k; <br />    for (i =0; i < N; i++) <br />        scanf("%d", &a[i]);<br />    ...<br />    return 0;<br />}<br />

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

Объявляем массив А из 30 элементов.<br />Объявляем целочисленные переменные I, J, К.<br />В цикле от 1 до 30 вводим элементы массива А с 1-го по 30-й.<br />...<br />

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

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

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

На языке Паскаль

k := 0;<br />for i := 1 to N - 1 do<br />    if (a[i] mod 7<> 0) or (a[i+1] mod 7 <> 0) then<br />        inc(k);<br />writeln(k);

На алгоритмическом языке

k := 0;<br />нц для i от 1 до N - 1<br />    если mod(a[i], 7) <> 0 или mod(a[i], 7) <> 0<br />    то <br />        k := k + 1<br />    все<br />кц<br />вывод k

На языке Бейсик

K = 0<br />FOR I = 1 TO N - 1<br />    IF (A(I) MOD 7 <> 0) OR (A(I + 1) MOD 7 <> 0) THEN<br />        K = K + 1<br />    END IF<br />NEXT I<br />PRINT K

На языке Си

k = 0<br />for (i = 0;    i < N - 1; i++)<br />    if (а [i] % 7 ! =    0  a[i + 1] % 7 != 0)<br />        k++;            <br />printf("%d", k);

На языке Python

k = 0<br />for i in range(0, n - 1):<br />    if (a[i] % 7 != 0 or a[i + 1] % 7 != 0;<br />        k += 1<br />print(k)

На естественном языке

 Записываем в переменную К начальное значение, равное 0. В цикле от первого элемента до предпоследнего находим остаток от деления текущего и следующего элемента массива на 7. Если первый или второй из полученных остатков не равен 0, увеличиваем переменную К на единицу.<br />После завершения цикла выводим значение переменной К
26

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

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

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Описать стратегию игрока — значит описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при раз¬личной игре противника. Например, при начальных позициях (20, 30) и (37, 20) выигрышная стратегия есть у Пети. Чтобы выиграть, ему достаточно удвоить количество камней во второй куче.

Задание 1

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

Задание 2

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

Задание 3

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

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

Задание 1.

В начальных позициях (10, 33), (14, 31) выигрышная стратегия есть у Вани. При начальной позиции (10, 33) после первого хода Пети может получиться одна из следующих четырёх позиций: (11, 33), (20, 33), (10, 66), (10, 34). Каждая из этих позиций содержит менее 77 камней. При этом из любой из этих позиций Ваня может получить позицию, содержащую не менее 77 камней, удвоив количество камней во второй куче. Для позиции (14, 31) после первого хода Пети может получиться одна из следующих четырёх позиций: (15, 31), (28, 31), (14, 32), (14, 62). Каждая из этих позиций содержит менее 77 камней. При этом из любой из этих позиций Ваня может получить позицию, содержащую не менее 77 камней, удвоив количество камней во второй куче. Таким образом, Ваня при любом ходе Пети выигрывает своим первым ходом.

Задание 2.

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

Задание 3.

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

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

Примечание. В некоторых случаях возможны и другие завершающие выигрышные ходы Вани, например, из позиции (13, 60) можно выиграть, сходив (26, 60)

27

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

Необходимо найти в заданной серии показаний датчика минимальное чётное произведение двух показаний, между моментами передачи которых прошло не менее 8 секунд. Если получить такое произведение не удаётся, ответ считается равным -1. Общее количество показаний датчика в серии не превышает 10 000.

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

Итоговая оценка выставляется как максимальная из оценок за задания А и Б. Если решение одного из заданий не представлено, то считается, что оценка за это задание — 0 баллов.

Задание Б является усложнённым вариантом задания А, оно содержит дополни¬тельные требования к программе.

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

ОБЯЗАТЕЛЬНО укажите, что программа является решением ЗАДАНИЯ А. Максимальная оценка за выполнение задания А — 2 балла.

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

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

ОБЯЗАТЕЛЬНО укажите, что программа является решением ЗАДАНИЯ Б. Максимальная оценка за правильную программу, эффективную по времени и по памяти, — 4 балла.

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

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

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

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

10

5

4

3

2

1

6

7

8

9

4

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

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

16

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

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

Задание А

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

Программа 1.

const s = 8; {требуемое расстояние между показаниями} <br />var<br />    N: integer;<br />    a: array[1..10000] of integer; {все показания датчика} <br />    mp: integer; {минимальное значение произведения} <br />    i, j: integer; <br />begin<br />    readln(N);<br />    {Ввод значений датчика} <br />    for i := 1 to N do <br />        readln(a[i]); <br />    mp := 1000 * 1000 + 1; <br />    for i := 1 to N - s do begin <br />        for j := i + s to N do begin<br />            if (a [ i] * a[j] mod 2 = 0) and (a [ i] * a[j] < mp) <br />                then mp := a[i] * a[j]<br />        end;<br />    end;<br />    if mp = 1000 * 1000 + 1 then mp := -1; <br />    writeln(mp) <br />end.

Задание Б

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

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

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

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

Программа 2.

const s = 8; {требуемое расстояние между показаниями}<br />        аmах = 1001;{больше максимально возможного показания}<br />var<br />    N: integer;<br />    a; array[l..s] of integer; {хранение s показаний датчика} <br />    а_: integer; {ввод очередного показания} <br />    mа: integer; {минимальное число без s последних} <br />    mе: integer; {минимальное чётное число без s последних} <br />    mp: integer; {минимальное значение произведения} <br />    р: integer; i, j: integer; <br />begin<br />    readln (N);<br />    {Ввод первых s чисел}<br />    for i : = 1 to s do readln(a[i]);<br />    {Ввод остальных значений, поиск минимального произведения} <br />    mа : = аmах; mе := аmах; <br />    mр := аmах*аmах; <br />    for i := s + 1 to N do begin <br />        readln(a_);<br />        if a [ 1] < та then та := a[1] ;<br />        if {a[1] mod 2 = 0) and {a[1] < me) then me := a[1]; <br />        if a_ mod 2=0 then p := a_ * ma <br />        else if me < amax then p := a_ * me <br />            else p := amax * amax; <br />        if (p < mp) then mp := p;<br />        {сдвигаем элементы вспомогательного массива влево} <br />        for j := 1 to s - 1 do <br />            a[j]    := a [j + 1];<br />        a [s] := a_<br />    end;<br />    if mp = amax * amax then mp := -1; <br />    writeln(mp) <br />end.
0 из 0
Ваш ответ Правильный ответ Первичный балл

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

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