我想创建一个函数,该函数可以返回给定数组中存在的数量不同的值。例如,如果数组是
array [5] = {1 3 4 1 3},返回值应为3(数组中3个唯一数字)。
到目前为止,我只有这个:
int NewFucntion(int values[], int numValues){
for (i=0; i<numValues; i++){
我是一位新的编码器/ C语言新手,并且对如何进行编程感到困惑。任何指导将不胜感激。谢谢
答案 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
而不是负值。
希望能有所帮助。
快乐的编码。 :)