CCF 201312-1 出现次数最多的数

试题编号: 201312-1
试题名称: 出现次数最多的数
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
  给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
输入格式
  输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。
  输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。
输出格式
  输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。
样例输入
6
10 1 10 20 30 20
样例输出
10

关键字:map、list、重载自定义类

 1 #include<iostream>
 2 #include<map>
 3 #include<list>
 4 using namespace std;
 5 struct yc2i{
 6     int value;
 7     int count;
 8 };
 9 bool operator < (const yc2i &a,const yc2i &b){
10     if(a.count < b.count){
11         return true;
12     }
13     else if(a.count == b.count && a.value > b.value){
14         return true;
15     }
16     else{
17         return false;
18     }
19 }
20 int main(){
21     //freopen("in2.txt","r",stdin);
22     int gn = 0;
23     cin >> gn;
24     map<int,int> ma;
25     for(int i = 0;i<gn;i++){
26         int buf = 0;
27         cin >> buf;
28         ma[buf]++;
29     }
30     list<yc2i> li;
31     for(map<int,int>::iterator itm = ma.begin();itm!=ma.end();itm++){
32         yc2i buf;
33         buf.value = itm->first;
34         buf.count = itm->second;
35         li.push_back(buf);
36     }
37     li.sort();
38 
39     yc2i res = li.back();
40     cout << res.value << endl;
41     return 0;
42 }

 

posted @ 2017-10-14 13:55  ywsswy  阅读(207)  评论(0编辑  收藏  举报