разработка функции, которая возвращает количество различных значений, которые существуют в массиве - PullRequest
0 голосов
/ 30 сентября 2018

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

array [5] = {1 3 4 1 3}, возвращаемое значение должно быть 3 (3 уникальных числа в массиве).

Пока чтотолько получил это:

int NewFucntion(int values[], int numValues){
for (i=0; i<numValues; i++){

Я новый кодер / Новый для языка C, и я застрял на том, как продолжить.Любое руководство будет высоко ценится.Спасибо

Ответы [ 3 ]

0 голосов
/ 30 сентября 2018

Мне нравится ответ wdc, но я собираюсь дать альтернативу, использующую только массивы и целые числа, поскольку вы представляете код для кодирования на c, а ответ wdc - это ответ на c ++:

Для этого вам нужнонужно пройти через ваш массив, как вы это сделали, и сохранить новые числа, которые вы перебираете, в другом массиве, назовем его repArray, где повторений не будет;Поэтому каждый раз, когда вы добавляете что-то в этот массив, вы должны проверять, не существует ли уже номер.Вам нужно создать его и дать ему размер, так почему бы не numValues, поскольку он не может получить больше, чем это.И целые числа, указывающие, сколько из его индексов являются действительными, другими словами, сколько вы написали, скажем, validIndexes.Поэтому каждый раз, когда вы добавляете новый элемент в repArray, вам нужно увеличивать validIndexes.В итоге validIndexes будет вашим результатом.

0 голосов
/ 30 сентября 2018
int distinct(int arr[], int arr_size){

    int count = arr_size;
    int current;
    int i, j;
    for (i = 0; i < arr_size; i++){
        current = arr[i];
        for (j = i+1; j < arr_size; j++) // checks values after [i]th element.
            if (current == arr[j])
                --count; // decrease count by 1;
    }

    if (count >= 0)
        return count;
    else return 0;
}

Вот объяснение.Массив с его размером передается в качестве аргумента.current хранит элемент для сравнения с другими.count - это число, которое нам нужно, наконец.count присваивается значение размера массива (т.е. мы предполагаем, что все элементы уникальны).(Это может быть и наоборот). Цикл for запускается, и первый (0-й) элемент сравнивается с элементами после него.Если элемент повторяется, т. Е. if (current==arr[j]), то значение count уменьшается на 1 (поскольку мы ожидали, что все элементы будут уникальными, и поскольку он не уникален, число уникальных значений теперь на единицу меньше, чем онобыл изначально. Отсюда --count).Циклы продолжаются, и значение уменьшается до любого количества уникальных элементов.В случае, если наш массив {1,1,1,1}, код будет печатать 0 вместо отрицательного значения.Надеюсь, это поможет.Удачного кодирования.:)

0 голосов
/ 30 сентября 2018

Добавьте элементы из array в std::set<T>, и поскольку set не допускает дублирование элементов, вы можете получить только количество элементов из набора, которое даст вам количество отдельных элементов.

Например:

#include<set>

int NewFucntion(int values[], int numValues){

   std::set<int> set;  

   for(int i=0; i<numValues; i++){
   set.insert(values[i]);
   }

   return set.size();

}
...