suseoj 1206 众数问题 (相邻数比较)

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;
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\n%d\n", num, my_max);
33     return 0;
34 }

猜你喜欢

转载自www.cnblogs.com/GetcharZp/p/9054293.html