【问题标题】:Finding which values occur most often in an array (C)查找数组中最常出现的值 (C)
【发布时间】:2020-11-05 19:47:29
【问题描述】:

我有一个包含随机生成数字的数组,我需要找到并存储至少出现 x 次的数字。 (我可以很容易地找到 x,这并不重要。它将是一个固定的数量)。该数组将包含大约 100-200 个元素。

我知道我必须使用循环,但我不确定如何构建它的主体。我对 C 编程比较陌生,所以这可能相当简单。任何帮助表示赞赏。

【问题讨论】:

标签: c


【解决方案1】:

这里描述了一种方法。

对数组进行排序。为此,您可以使用 qsort - 它既简单又快速。

在计算相同元素的同时迭代已排序的数组,例如:

int cur = arr[0];
int count = 1;
for (size_t i = 1; i < SIZE_ARR; ++i)
{
    if (cur == arr[i])
    {
        ++count;
    }
    else
    {
        if (count >= X)
        {
            // Save cur to result array
        }
        count = 1;
        cur = arr[i];
    }
}
if (count >= X)
{
     // Save cur to result array
}

【讨论】:

    【解决方案2】:

    我添加了伪代码,您可以轻松地将其转换为 C。这假设所有随机数都是正整数,并且不会太大。

    create an array count of maximum-possible-random-number int elements initialised to 0.
    
    for every entry in rng array:
      count[entry]++
    
    for every entry in count array:
      if(entry >= x)
        print(entry's index)
    
    

    【讨论】:

    • 这是已知的 200 个不同的值,可能是特定的值 0-199。对于来自未知和可能更大范围的 200 个值条目,它将不起作用。从 0 .. maxint 考虑 200 个条目。
    • 现在理论上可以使用。实际上可能会杀死 RAM 大小。我认为您应该在回答之前要求澄清。
    • 这适用于 16 位数字,但如果数组太大,32 位数字(更不用说 64 位数字)的大小。
    • 我的观点仍然成立。初学者理解循环就足够了。
    猜你喜欢
    • 1970-01-01
    • 2014-08-04
    • 2019-10-27
    • 2011-04-29
    • 1970-01-01
    • 2017-06-27
    • 2011-05-08
    • 1970-01-01
    • 2019-10-07
    相关资源
    最近更新 更多