Задача
Дано масив з [latex]N[/latex] цілих чисел. Визначте, скільки в цьому масиві різних елементів.
Вхідні дані
В першому рядку записано число [latex]N[/latex]. В наступному рядку записано [latex]N[/latex] цілих чисел. Всі числа за модулем не перевищують [latex]100[/latex].
Вихідні дані
Кількість різних елементів в масиві.
Тести
№ | Вхідні дані | Вихідні дані |
1. | 7 3 5 -7 7 5 -9 -4 |
6 |
2. | 5 1 25 59 75 100 |
5 |
3. | 6 1 2 3 1 2 4 |
4 |
Код 1
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 28 29 30 31 32 |
#include <iostream> using namespace std; int main() { int n; cin >> n; int* a = new int[n]; for (int i = 0; i < n; i++) { cin >> a[i]; } int diffNum = 0; for (int i = 0; i < n; i++) { bool newNum = true; for (int j = 0; j < i; j++) { if (a[j] == a[i]) { newNum = false; break; } } if (newNum == true) { diffNum++; } } cout << diffNum; return 0; } |
Код 1(without break)
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 28 29 |
#include <iostream> using namespace std; int main() { int n; cin >> n; int* a = new int[n]; for (int i = 0; i < n; i++) { cin >> a[i]; } int diffNum = 0; for (int i = 0; i < n; i++) { bool newNum = true; for (int j = 0; j < i && a[i-1] != a[j]; j++) { if (a[j] == a[i]) { newNum = false; } } if (newNum == true) { diffNum++; } } cout << diffNum; return 0; } |
Решение
Ставим отметку числу как будто видим его впервые.
Далее задача пройти по всем предыдущим числам и проверить не встретится ли такое же число.
Если встретится, то отметку снимаем, а пройдя по всем предыдущим числам так и не встретив числа равного текущему, значит «видим его впервые» и отметка поставлена справедливо.
Считаем количество отметок.
Ссылки
Код 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include <iostream> using namespace std; #include int main() { vector a(202, false); int n, diffNum, curVal; cin >> n; diffNum = n; for(int i = 0; i < n; i++) { cin >> curVal; if(a[curVal + 100]) { diffNum--; } else { a[curVal + 100] = true; } } cout << diffNum << endl; return 0; } |
Решение
Сначала, предположим, что все числа разные. Т.е. количество различных чисел равно [latex]n.[/latex] Далее в цикле for отметим читаем числа из потока и отмечаем в векторе vector<bool> a, что число встретилось. Встретив число ранее уже отмеченное уменьшаем счетчик различных чисел.