Задание №1701/25
Задание
Дан массив, содержащий 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)
распишите ход решения
Здравствуйте, что написать в вводе данных после выполнения(F9)?
Добрый вечер! Для проверки лучше поменять N = 2017 на N = 6 и ввести данные из примера, то есть 2 0 1 0 0 1
Здравствуйте, что написать в вводе данных после выполнения(F9)?
Здравствуйте, Гриша!
В ближайшее время напишу пояснение к решению данного номера.
Напишите объяснение к решению задач , пожалуйста