蓝桥杯备赛: 算法训练 出现次数最多的整数(c++map使用)

问题描述
  编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。
  输入格式:第一行是一个整数N,N £ 20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。
  输出格式:输出只有一行,即出现次数最多的那个元素值。
输入输出样例
样例输入
5
100
150
150
200
250
样例输出
150

个人分析:
简单来说,也就是众数问题,我是用map做的,因为最近在复习数据结构嘛,所以这次用了map来解,个人觉得c++一些方法还是挺不错的,能省很多代码,用数组又要考虑大小和超时等等方面
首先,我们创建map我起名为mp 通过样例输入来记录每个数字的个数,然后类似于一位数组求最大值一样 先定义一个默认最大值,然后进行迭代比较 最后输出出现次数最大的那个
然后这个题目如果用mp的话就有一个巧妙地地方 不用像结构体那样还要考虑是否众数有多个,因为这个样例输入默认是从小到大输入的,如果用mp的话,就没必要考虑这个情况,比如150有3个 200有3个 但是不满足 >条件 所以不会交换出现次数的最大值 !
具体代码如下:
AC

#include
#include
using namespace std;
map<int,int> mp;
map<int,int> ::iterator it;
int main()
{
    int n;
    cin>>n;
    if(n<=0)
    {
        return 0;
    }
    for(int i=0;i<n;i++)
    {
        int x;
        cin>>x;
        mp[x]++;
    }
    it=mp.begin();
    int maxn=it->first;
    for(it=mp.begin();it!=mp.end();it++)
    {
        if(it->second>mp[maxn])
        {
            maxn=it->first;
        }
    }
    cout<<maxn<<endl;
    return 0;
}

学如逆水行舟,不进则退

你可能感兴趣的:(算法,蓝桥杯备赛,算法训练,出现次数最多的整数,map,c++)