众数
【问题描述】
有n个1到30000的正整数,1≤n≤10000,同一个正整数可能会出现多次,出现次数最多的整数称为众数。求出它的众数及它出现的次数。
【输入形式】
第一行是正整数的个数n。
第二行有n个正整数,用空格分开。
【输出形式】
输出若干行,每行两个数,第1个是众数,第2个是众数出现的次数,中间用两个空格分开。
【样例输入】
12
2 4 2 3 2 5 3 7 2 3 4 3
【样例输出】
2 4
3 4
参考同学代码之后做出来的:
#include <iostream>
#include <iomanip>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
int t[30001];
//int r[10001];
bool cmp(int a,int b){
return a<b;
}
int main(int argc, const char * argv[]) {
// insert code here...
int n;
int p;
while(cin>>n){
memset(t,0,sizeof(t));
//memset(r,0,sizeof(r));
int m=-1,mc=-1;
for(int i=0;i<n;i++){
cin>>p;
t[p]++;
if(t[p]>m){
m=t[p];
}
if(p>mc){
mc=p;
}
}
//sort(r,r+n,cmp);
/*
for(i=0;i<n;i++){
if(t[r[i]]>m){
m=t[r[i]];
}
}
*/
for(int j=0;j<=mc;j++){
if(t[j]==m){
cout<<j<<" "<<t[j]<<endl;
//t[r[j]]=0;
}
}
}
return 0;
}
我自己之前的:但是,答案错误·,一直找不出问题所在。大家有会做的吗?指点一下
#include <iostream>
#include <iomanip>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
long t[30001];
long r[10001];
bool cmp(int a,int b){
return a<b;
}
int main(int argc, const char * argv[]) {
// insert code here...
int n;
int p;
while(cin>>n){
memset(t,0,sizeof(t));
memset(r,0,sizeof(r));
int m=-1;
for(int i=0;i<n;i++){
cin>>r[i];
++t[r[i]];
if(t[r[i]]>=m){
m=t[r[i]];
}
}
sort(r,r+n,cmp);
/*
for(i=0;i<n;i++){
if(t[r[i]]>m){
m=t[r[i]];
}
}
*/
for(int j=0;j<n;j++){
if(t[r[j]]==m){
cout<<r[j]<<" "<<t[r[j]]<<endl;
t[r[j]]=0;
}
}
}
return 0;
}