【发布时间】:2015-04-17 20:41:17
【问题描述】:
int num_distinct(int a[], int n)
{
int i, k, j, count=0;
int max = a[0];
for (i = 1; i < n; i++) {
if (max < a[i]) {
max = a[i];
}
}
for (k = 0; k < n; ++k) {
for (j = 0; j < n; ++j) {
if (a[j] == max) {
++count;
--max;
break;
}
}
}
return (count);
}
我试图做的是找到数组中的最大值并将其与数组中的其余元素进行比较。它可以工作,但是当数组跳过一个数字时,即 (1,2,2,5,6,7,8)
【问题讨论】:
-
好吧,我正在尝试创建一个函数,在该函数中计算数组中的所有唯一元素。例如 a[1,4,2,6,6,7,8,5,5,4],这个 aray 将有 7 个唯一元素。我的程序会找到数组的最大值,然后进行比较以计算唯一元素...但是它有问题,当您输入数组但跳过一个数字(例如 1,2,4,5 ,它不会计数所有唯一的数字......我不知道它有什么问题。
-
您只有在找到匹配项时才减少
max,当您的序列中有漏洞时您不会这样做。例如:您的测试向量将找到 8、7、6 和 5,但由于没有 4,max永远不会被调整为寻找3、2或1,并且最终会出现双循环以您找到的四个项目的总和结束。
标签: c arrays unique counter elements