Нужна помощь, чтобы разобраться в задаче [требует правки]

250
07 февраля 2018, 13:30

Дан одномерный массив. Найти количество различных чисел в этом массиве, используя функцию сортировки.

Answer 1

Код (использовал сортировку методом пузырька):

#include <iostream>
using namespace std;
int main()
{
    setlocale( LC_ALL,"Russian");
    int *arr; // Указатель для выделения памяти под массив
    int size; // Размер массива
    int copy; // Переменная для хранения числа
    int num = 1; // Счетчик различных чисел
    // Ввод количества элементов массива
    cout << "Введите количество элементов массива: ";
    cin >> size;
    if (size <= 0) {
        // Размер масива должен быть положитлеьным
        cerr << "Неверный размер массива!" << endl;
        return 1;
    }
    arr = new int[size]; // Выделение памяти под массив
    // Заполнение массива
    for (int i = 0; i < size; i++) {
        cout << "Введите arr[" << i << "]: ";
        cin >> arr[i];
    }
    int temp; // Временная переменная для обмена элементов местами
    // Сортировка массива пузырьком
    for (int i = 0; i < size - 1; i++) {
        for (int j = 0; j < size - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                // Меняем элементы местами
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
    copy = arr[0];
    // Счет различных чисел
    for (int i = 1; i < size; i ++) {
        if (arr[i] != copy)
        {
            num ++;
        }
        copy = arr [i];
    }
    cout << "Количество различных элементов: " << num << endl; //Выводим количество различных чисел
    delete [] arr; // Освобождаем память
    return 0;
}
Answer 2
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;
int main() {
    vector<int>vec;
    int n; //к-ство е-тов массива
    int q;
    cout << "Введите к-ство е-тов массива" << endl;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> q;
        vec.push_back(q);
    }
    sort(vec.begin(),vec.end()); //использываем функцию сортировки

    int count = 1;
    for (int i = 0; i < n - 1; i++)     
    {
        for (int tmp = i + 1; tmp < n; tmp++)      
        {
            if (vec[i] == vec[tmp]) {break;}
            if (vec[i] != vec[tmp]) {count++;break;}
        }
    }
    //раз массив отсортирован, то для того чтобы елемент был уникальным достаточно того, чтобы он не был равен следующему
    cout <<"к-ство уникальніх е-тов" << count << endl;
    return 0;
}
READ ALSO
Проблема синхронизации потоков в Embarcadero Builder C++

Проблема синхронизации потоков в Embarcadero Builder C++

Пишу оконное приложение на Embarcadero C++ Builder XE7, ОС Windows 7В нем при запуске главной формы создается, но сразу не запускается поток

228
Разложение числа на множители

Разложение числа на множители

Всем привет, надо разложить число на множители(определенные)С маленькими числами все работает

260
Как Отловить вызов функции mono

Как Отловить вызов функции mono

Возможно ли присечь вызовы функций

259
Поощрите лентяя, а то попробовал свой код написать ничего не выходит( [требует правки]

Поощрите лентяя, а то попробовал свой код написать ничего не выходит( [требует правки]

Оценки, полученные спортсменом в соревнованиях по фигурному катанию (в баллах), хранятся в массиве из 18 элементовВ первых шести элементах...

166