1206: 众数问题
时间限制: 1 Sec 内存限制: 128 MB提交: 45 解决: 8
[提交][状态][讨论版][命题人:liyuansong]
题目描述
给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。
例如,S={1,2,2,2,3,5}。多重集S的众数是2,其重数为3。
对于给定的由n个自然数组成的多重集S,计算S的众数及其重数。
输入
第1行为多重集S中元素个数n;在接下来的n行中,每行有一个自然数。
输出
有2行,第1行是众数,第2行是重数。
样例输入
6 1 2 2 2 3 5
样例输出
2 3
分析(步骤):
①、从左到右遍历如果第i个数 == 第i+1个数 temp ++;
②、否则temp = 1, a = b;
PS:①、新加入的数据的重数如果 == 原先的最大重数,应该让众数为新加入的数据(小编在这里wr三次)
②、题目的数据输入默认是升序的
核心代码:
1 scanf("%d", &a); 2 for(int i = 1; i < n; ++ i) 3 { 4 scanf("%d", &b); 5 if(a == b) temp ++; 6 else 7 { 8 temp = 1; 9 a = b; 10 } 11 if(temp >= my_max) 12 { 13 my_max = temp; 14 num = b; 15 } 16 }
C/C++代码实现(AC):
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include <cmath> 6 #include <stack> 7 #include <map> 8 #include <queue> 9 10 using namespace std; 11 12 int main() 13 { 14 int n, num, my_max = -0x3f3f3f3f, a, b, temp = 1; 15 scanf("%d", &n); 16 scanf("%d", &a); 17 for(int i = 1; i < n; ++ i) 18 { 19 scanf("%d", &b); 20 if(a == b) temp ++; 21 else 22 { 23 temp = 1; 24 a = b; 25 } 26 if(temp >= my_max) 27 { 28 my_max = temp; 29 num = b; 30 } 31 } 32 printf("%d %d ", num, my_max); 33 return 0; 34 }