注解
1、求出现次数第二多的数。先依次统计每个数出现的次数。然后求出第二多的出现次数是几。然后再遍历一遍,把出现次数等于这个数的所有数都求出来。
代码
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 10001;
struct Num{
int x;
int cnt;
};
int compare(Num n1, Num n2){
if(n1.cnt!=n2.cnt){
return n1.cnt>n2.cnt;
}
else{
return n1.x<n2.x;
}
}
int main() {
int N, M;
cin>>N>>M;
while(N || M){
Num num[maxn];
for(int i=0; i<maxn; i++){
num[i].x = i;
num[i].cnt = 0;
}
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
int t;
cin>>t;
num[t].cnt++;
}
}
sort(num, num+maxn, compare);
int mmax = num[0].cnt;
int pos = -1;
int secondmax = -1;
for(int i=0; i<N; i++){
if(num[i].cnt<mmax){
pos = i;
secondmax = num[i].cnt;
break;
}
}
cout<<num[pos].x;
for(int i=pos+1; i<maxn; i++){
if(num[i].cnt==secondmax){
cout<<" "<<num[i].x;
}
}
cout<<endl;
cin>>N>>M;
}
return 0;
}