开发一个函数,该函数返回数组中存在的不同值的数量

时间:2018-09-30 07:17:13

标签: c arrays function for-loop

我想创建一个函数,该函数可以返回给定数组中存在的数量不同的值。例如,如果数组是

array [5] = {1 3 4 1 3},返回值应为3(数组中3个唯一数字)。

到目前为止,我只有这个:

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

我是一位新的编码器/ C语言新手,并且对如何进行编程感到困惑。任何指导将不胜感激。谢谢

3 个答案:

答案 0 :(得分:1)

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();

}

答案 1 :(得分:0)

我喜欢wdc的答案,但是当您希望在c中进行编码时,我将仅使用数组和整数作为替代方案,而wdc的答案是c ++答案:

要执行此操作,您需要做的就是像以前一样遍历数组,并将遍历的新数字存储在另一个数组中,将其称为repArray,其中不会重复。因此,每次向该数组添加内容时,都应检查数字是否还不存在。 您需要创建它并给它一个大小,为什么不给numValues做准备,因为它不能再超过它。还有一个整数,指定其中有多少个索引有效,换句话说,您编写了多少个有效索引。因此,每次将新元素添加到repArray时,都需要增加validIndexes。 最后,validIndexes将是您的结果。

答案 2 :(得分:0)

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(因为我们期望所有元素都是唯一的,并且由于它不是唯一的,所以唯一值的数量现在为1小于最初的值,因此--count)。 循环继续进行,并且值减小为唯一元素的数量。 如果我们的数组是{1,1,1,1},那么代码将打印0而不是负值。 希望能有所帮助。 快乐的编码。 :)