Подготовка к ЕГЭ и олимпиадам по информатике 2020 / Тренировочные варианты ЕГЭ

Профильная информатика:
подготовка к ЕГЭ и олимпиадам

Вариант № EGE_INF_1701

Добавлен 18 мая 2017 г. в 0:11. Изменён 24 декабря 2017 г. в 22:53.Скачать PDF
1Р 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

Задание

Дан массив, содержащий 2017 целых чисел. Необходимо определить количество «уникальных» значений элементов этого массива, то есть количество значений элементов без учёта их возможных повторов. Например, в массиве из 6 элементов, равных соответственно 2; 0; 1; 0; 0; 1, уникальными значениями являются 0; 1; 2, значит, ответом будет 3 — их количество.

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

  • Копировать
    const
      N = 2017;
    var
      a : array [0 .. N - 1] of integer;
      i, j, count : integer;
    begin
      for i := 0 to N - 1 do
        readln(a[i]);
      ...
    end.
    
  • Копировать
    #include <stdio.h>
    #define N 2017
    
    int main() {
      int a[N];
      int i, j, count;
      for (i = 0; i < N; i++)
        scanf("%d", &a[i]);
      ...
      return 0;
    }
    
  • Копировать
    CONST N = 2017
    DIM A(N - 1) AS INTEGER
    DIM I, J, COUNT AS INTEGER
    FOR I = 0 TO N - 1
      INPUT A(I)
    NEXT I
    ...
    END
    
  • Копировать
    # допускается также использо-
    # вание целочисленных
    # переменных j, count
    N = 2017
    a = []
    for i in range(N) :
      a.append(int(input()))
    ...
    

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

Решение

Инициализируем нулём счётчик count «уникальных» элементов и организуем цикл по всем элементам массива.

Чтобы проверить текущий элемент с индексом i (для 0 ≤ i < n) на «уникальность», необходимо сравнить его со всеми предыдущими элементами, имеющими соответственно индексы от 0 до i. Присвоим переменной j значение 0 и во вложенном цикле будем увеличивать его на единицу до тех пор, пока элемент с индексом j не окажется равным проверяемому элементу с индексом i.

Очевидно, что вложенный цикл никогда не окажется бесконечным. Действительно, в «худшем» случае в определённый момент значение переменной j окажется равным значению переменной i и условие продолжения цикла не выполнится. Следовательно, проверяемый элемент с индексом i ранее в массиве не встречался и тогда счётчик count необходимо увеличить на единицу.

В остальных случаях (если вложенный цикл закончился раньше, то есть j < i) проверяемый элемент с индексом i ранее уже встречался и потому «уникальным» не является.

Подробнее...

Ответ

  • Копировать
    count := 0;
    for i := 0 to N - 1 do begin
      j := 0;
      while a[j] <> a[i] do
        j := j + 1;
      if j = i then
        count := count + 1
    end;
    writeln(count);
    
  • Копировать
    count = 0;
    for (i = 0; i < N; i++) {
      j = 0;
      while (a[j] != a[i])
        j++;
      if (j == i)
        count++;
    }
    printf("%d", count);
    
  • Копировать
    COUNT = 0
    FOR I = 0 TO N - 1
      J = 0
      WHILE A(J) <> A(I)
        J = J + 1
      WEND
      IF J = I THEN
        COUNT = COUNT + 1
      END IF
    NEXT I
    PRINT COUNT
    
  • Копировать
    count = 0
    for i in range (N) :
      j = 0
      while a[j] != a[i] :
        j += 1
      if j == i :
        count += 1
    print(count)
    
Подробнее...