21xrx.com
2024-11-08 22:15:29 Friday
登录
文章检索 我的文章 写文章
C++如何求解一个数组的众数
2023-07-07 00:29:04 深夜i     --     --
C++ 数组 众数 求解

在研究一个数组的数据特征时,众数是一个非常重要的指标。众数指的是数组中出现次数最多的数值。在C++中,我们可以通过多种方法来求解一个数组的众数。

方法一:使用计数法

计数法的思路是先将数组中的每个数都记录下来,然后统计它们出现的次数,最终找到出现次数最多的数即为众数。在实际编程中,我们可以使用map数据结构来存储每个数的出现次数,代码如下:


#include <iostream>

#include <map>

using namespace std;

int main()

{

  int nums[] = 2;

  map<int, int> counts;

  int maxCount = 0;

  int mode = 0;

  for (int i = 0; i < sizeof(nums)/sizeof(int); i++)

  {

    int count = ++counts[nums[i]];

    if (count > maxCount)

    {

      maxCount = count;

      mode = nums[i];

    }

  }

  cout << "众数为:" << mode << endl;

  return 0;

}

在上述代码中,我们使用map 数据结构来统计每个数的出现次数,其中键为数值,值为出现次数。另外我们使用了一个maxCount变量来记录出现次数最大值,再用一个mode变量来记录对应的数值,最终输出mode变量就是众数。

方法二:使用排序法

排序法的思路是先将数组排序,然后从前往后遍历,记录出现次数最多的数即为众数。在实际编程中,我们可以使用快速排序算法将数组排序,代码如下:


#include <iostream>

#include <algorithm>

using namespace std;

int main()

{

  int nums[] = 1;

  sort(nums, nums + sizeof(nums)/sizeof(int));

  int maxCount = 0;

  int mode = 0;

  int count = 0;

  for (int i = 0; i < sizeof(nums)/sizeof(int); i++)

  {

    if (nums[i] == nums[i+1])

    {

      count++;

    }

    else

    {

      if (count > maxCount)

      {

        maxCount = count;

        mode = nums[i];

      }

      count = 1;

    }

  }

  cout << "众数为:" << mode << endl;

  return 0;

}

在上述代码中,我们使用sort函数将数组从小到大排序,然后遍历数组,记录出现次数最多的数即为众数。另外我们使用了一个count变量来统计当前数值的出现次数,maxCount变量来记录出现次数最大值,mode变量来记录对应的数值。当遍历到不同的数值时,我们需要更新count变量为1,避免重复累加。

需要注意的是,以上两种方法都没有考虑众数有多个的情况,如果数组中有多个众数,上述两个方法都只能求出其中的一个。如果需要求出所有众数,可以使用方法一,多记录出现次数相同的数值即可。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复