Задание 4. Тип заданий 25: обработка массивов.
  • Задание:

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

    Бейсик Python

    CONST N AS INTEGER = 20
    DIM A (1 TO N) AS INTEGER
    DIM I AS INTEGER,
        J AS INTEGER,
        K AS INTEGER


    FOR I = 1 TO N
        INPUT A(I)
    NEXT I


    END

    # допускается также
    # использовать две
    # целочисленные переменные j и k
    a = []
    n = 20
    for i in range(0, n):
        a.append(int(input()))
    Алгоритмический язык Паскаль
    алг
    нач
       цел N = 20
       целтаб a[1:N]
       цел i, j, k
       нц для i от 1 до N
          ввод a[i]
       кц
      …

    кон
    const
        N = 20;
    var
        a: array [1..N] of integer;
        i, j, k: integer;
    begin
        for i := 1 to N do
            readln(a[i]);
       …

    end.
    Си
    #include <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;
    }

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

    Источник: демоверсия ФИПИ по информатике и ИКТ 2016-го года.

    В решении задания есть видеоразбор

     

  • Решение:

    Нужно найти количество пар элемента массива, в которых хотя бы один элемент делится на 3. Пара — это два рядом стоящих элемента. Допустим, в массиве:

    1 2 3 4 5
    7 12 5 6 8

    парами будут элементы (7 12), (12 5), (5 6), (6 8), и количество пар, в которых хотя бы один элемент кратен трём — 4.

     

    Для проверки пар элементов будем использовать цикл. Каждый повтор цикла будет проверяться элемент с индексом i, и следующий после него, то есть с индексом i+1.

    Обратите внимание, что счетчик цикла в последнем повторе не должен быть равен индексу последнего элемента. То есть, если для приведённого выше массива в последнем повторе цикла i=5, то будут проверяться элементы 5 и 5+1, то есть 5 и 6. Элемента с индексом 6 не существует, и допускать выход за границу массива нельзя. Последняя пара элементов содержит элементы с индексами 4 и 5, значит цикл должен проверять элементы не от 1 до n, а от 1 до n-1.

    В случае, если в паре есть хотя бы один элемент, кратный трём, к переменной будет прибавляться единица. У нас есть три переменные — i, j, k, переменная i используется как счетчик цикла, для определения количества возьмем переменную k. Переменная j лишняя, её можно не использовать, что разрешено по условию.

     

    Задачу можно решить двумя способами.

    1 способ. Просто проверим каждую пару, и если хотя-бы один элемент в ней кратен 3, то переменную k будем увеличивать на 1.

     

    k:=0; //обнулим переменную k

    for i:=1 to n-1 do //начало цикла с i от 1 до n-1

    if (a[i] mod 3 = 0) or (a[i+1] mod 3 = 0) then //если a[i] или a[i+1] кратно 3

    inc(k); //то k увеличиваем на 1

    writeln(k); //выводим k

     

    2 способ. Более элегантный. Произведение двух чисел будет кратно 3 только в том случае, если хотя бы одно из этих чисел будет кратно 3. Таким образом, если мы перемножим элементы пары, и произведение будет кратно 3, значит в паре есть элементы кратные 3:

     

    k:=0; //обнулим переменную k

    for i:=1 to n-1 do //начало цикла c i от 1 до n-1

    if a[i] * a[i+1] mod 3 = 0 then //если произведение a[i] и a[i+1] кратно 3

    inc(k); //то увеличиваем переменную k на 1

    writeln(k); //выводим k

     

    Видеоразбор задания:

Поделиться:
 
Комментарии (3)
Владислав Коренев # 23 января 2016 в 23:34 0
infbu.ru:
Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых хотя бы одно число делится на 3.
Но если делить число на 3(с остатком), то программа будет выводить ошибочные данные. Т.е-> при вводе, к примеру 1212 mod 3 =0, но в этом числе нет цифры 3 или цифры кратной 3, либо я что-то не понимаю. Если разбить на пары, то логично, что 1212 mod 3 = 0, тогда это число подходит. Но в самом задании просят проверить каждую цифру отдельно. Уже 1,5 часа сижу над этим заданием, так ничего и не придумал.
Информатик БУ # 24 января 2016 в 08:19 0
Дело не в том, есть ли в числе цифра. Тут же не просят, чтобы цифра в числе делилась на 3. Есть массив, допустим, состоящий из десяти элементов. Он содержит числа, допустим:
5 12 8 4 3 16 22 7 9 11
Пары, в которых хотя-бы одно число делится на 3 - 5-12, 12-8, 4-3, 3-16, 7-9, 9-11
Пара - это два рядом стоящих числа.

Т.е-> при вводе, к примеру 1212 mod 3 =0, но в этом числе нет цифры 3 или цифры кратной 3, либо я что-то не понимаю.

Вы понимаете разницу между числом и массивом? Речь не о числе, в котором пары цифр делятся на 3, речь о массиве, в которых числа целиком делятся на три.
Владислав Коренев # 24 января 2016 в 12:47 0
Я понял, речь идет об цифрах элементах массива. В таком случает тут просто надо было делить с остатком и сравнивать. я видимо просто не правильно понял задание) Есть еще один вопрос по поводу ответа. В ответ я должен записать только код, или лучше так же включить в ответ и блок схему. Вообще не понятно, как это задание будут проверять, ведь у разных задач в программировании есть разные способы решения, и, если проверять задание просто по ответу, то большинство будет не верным .-.
Перевести число из в Результат: 510 = 1012