题目描述
给定含有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
code:
1.java实现
import java.util.Scanner;
public class Main{
static int[][] solve(int[][] a, int n) {
int[][] b = new int[n][2];
int[][] c = new int[1][2];
int count = 0;
int m = 0;
for (int i = 0; i < a.length; i++) {
if (a[i][1] == 0) {
a[i][1] = 1;
m = a[i][0];
b[count][0] = m;
++(b[count][1]);
for (int j = i + 1; j < b.length; j++) {
if (a[j][0] != m)
continue;
else {
a[j][1] = 1;
++(b[count][1]);
}
}
++count;
} else
continue;
}
int max = 0;
int num = 0;
for (int i = 0; i < b.length; i++) {
if (max < b[i][1]) {
max = b[i][1];
num = b[i][0];
} else
continue;
c[0][0] = num;
c[0][1] = max;
}
return c;
}
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[][] a = new int[n][2];
for (int i = 0; i < n; i++) {
a[i][0] = scanner.nextInt();
a[i][1] = 0;
}
scanner.close();
int[][] num = solve(a, n);
System.out.println(num[0][0]);
System.out.println(num[0][1]);
}
}
2.C++实现
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int t;
cin>>t;
int A[t];
for(int i=0;i< t;i++)
cin>>A[i];
sort(A,A+t);
int num=A[0],sum=1;
int Znum=A[0],Zs=1;
for(int i=1;i<t ;i++)
{
if(A[i]==num)
{
sum++;
if(sum>=Zs)
{
Znum = A[i];
Zs=sum;
}
}
if(A[i]>num)
{
num=A[i],sum=1;
}
}
cout<<Znum<<endl<<Zs<<endl;
return 0;
}