Другие языки программирования и технологии

как сосчитать количество различных чисел в произвольном целочисленном массиве??? нужна программа в С++

ничего не понимаю в программировании, помогите, молююю
#include "iostream"
using namespace std;
int main(){
int i,j,n,p=0,a[100]; cout<<"n: " ; cin>>n;
cout<<"Enter "<< n<<" numbers:"<<endl; for(i=0;i< n;i++)cin>>a[i];
for(i=0;i< n;i++){for(j=0;j< i;j++)if(a[i]==a[j])break; p+=i==j;}
cout<<p<<endl; cin.get(); cin.get();}
Бахардин Тухтахунов
Бахардин Тухтахунов
52 102
Лучший ответ
Простейший подсчёт за O(n^2):

count = n;
for(i = 0; i < n-1; ++i) { for(j = i + 1; j < n; ++j) { if(a[i] == a[j]) { --count; break; } } }

Более быстрый алгоритм: отсортировать массив за O(n*ln(n)) и за один проход подсчитать кол-во пар различающихся соседних чисел в отсортированном массиве.
Жека Козлов
Жека Козлов
83 053
#include <iostream>
#include <iomanip>
#include <set>
#include <random>
using namespace std;
void fill(int* arr, const size_t size, int a = 1, int b = 100);
int get_int(int left, int right);
void show(int* arr, const size_t size, streamsize width);
set<int>::size_type unique_elements(int* arr, const size_t size);
int main() {
const size_t size = 100;
int arr[size];
streamsize width = 4;
fill(arr, size);
show(arr, size, width);
set<int>::size_type quantity = unique_elements(arr, size);
cout << " Quantity: " << quantity << endl;
cin.get();
}
set<int>::size_type unique_elements(int* arr, const size_t size) {
set<int> temp;
for (size_t i = 0; i < size; ++i) temp.insert(arr[i]);
return temp.size();
}
void show(int* arr, const size_t size, streamsize width) {
for (size_t i = 0; i < size; ++i) cout << setw(width) << arr[i];
cout << endl;
}
void fill(int* arr, const size_t size, int a, int b) {
for (size_t i = 0; i < size; ++i) arr[i] = get_int(a, b);
}
int get_int(int left, int right) {
if (left > right) swap(left, right);
uniform_int_distribution<int> rand(left, right);
random_device rnd;
return rand(rnd);
}
Пюрвя Мендяев
Пюрвя Мендяев
50 995
Самый простой способ (за квадрат) - это для каждого элемента ищешь, встречается ли он в предыдущих элементах массива, и если нет - увеличиваешь счётчик на единицу.
Более сложные (но быстрые на больших массивах) способы - это хэш-таблица или бинарное дерево поиска, к примеру.
Денис Юдин
Денис Юдин
95 087
т. е найти сумму уникальных чисел?

Ну начнемс

cout < < "input array size" < < endl;
int n;
cin > > n;
int mass[n],mass2[n];
int unicum_count=0;
for( int i=0; i < n ; i++){
cout < < "input element № " < < i < < endl;
cin > > mass[i];

if(i == 0) {
mass2[0]=mass[0];
++unicum_count;
}else{
bool key=false;
for( int j=0; j < unicum_count ; ++j)
if(mass2[j]==mass[i]) key=true;
if(!key){
mass2[unicum_count]=mass[i];
++unicum_count;
}
}
}
cout<<unicum_count<<end;
Zhandos Kick Ass
Zhandos Kick Ass
35 594
Валера Сюльг написано же количество, то бишь проверять пробегая по массиву уникально ли значение.
Сделай ей

Похожие вопросы