问题描述
编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。
输入格式:第一行是一个整数N,N<= 20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。
输出格式:输出只有一行,即出现次数最多的那个元素值。
样例输入
5
100
150
150
200
250
100
150
150
200
250
样例输出
150
解题思路:用map存储,重点复习c++的基础数据结构的操作
1 #include <bits/stdc++.h> 2 using namespace std; 3 map<int, int> mp; //first数字,second为数字出现的次数 4 int main(){ 5 int n; 6 cin >> n; 7 if (n <= 0) { //坑点,测试样例有n=0和n=-1的情况,n<=0时,应该什么也不输出直接return 0 8 return 0; 9 } 10 for (int i = 0; i < n; i++) { 11 int t; 12 cin >> t; 13 mp[t]++; //这个数出现的次数加一 14 } 15 map<int, int>::iterator it = mp.begin(); 16 int maxx = it -> first; //先默认第一个数出现的次数最大,然后擂台赛不断比较求最大值 17 //int sum = 0; 18 for (it = mp.begin(); it != mp.end(); it++) { 19 //sum++; 20 if (it -> second > mp[maxx]) { //如果遍历到的数的出现次数大于当前选定的数maxx的出现次数 21 maxx = it -> first; //将maxx更新为这个数 22 } 23 } 24 //cout << sum << endl; 25 cout << maxx << endl; 26 return 0; 27 }