试题编号: | 201503-2 |
试题名称: | 数字排序 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。 输入格式 输入的第一行包含一个整数n,表示给定数字的个数。 输出格式 输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。 样例输入 12 样例输出 3 4 评测用例规模与约定 1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数。 |
java:
import java.util.Scanner;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[1001];
int[] b = new int[1001];
for(int i = 0; i < n; i++) {
a[sc.nextInt()]++;
}
for(int i = 0; i < 1001; i++) {
b[i] = a[i];
}
Arrays.sort(b);
for(int i = 1000; i >= 0; i--) {
for(int j = 0; j < 1001; j++) {
if(a[j] == b[i] && b[i] != 0) {
System.out.println(j + " " + a[j]);
a[j] = 0;
}
}
}
}
}
c++:
#include <bits/stdc++.h>
using namespace std;
struct node{
int value;
int times;
node(){
times=1;
}
};
bool cmpnode(const node & n1,const node & n2){
if(n1.times!=n2.times) return n1.times>n2.times;
return n1.value<n2.value;
}
int main()
{
int n;cin>>n;
vector<node> v;
for(int i=0;i<n;i++){
int x;cin>>x;
int j;
for(j=0;j<v.size();j++){
if(v[j].value==x) break;
}
if(j==v.size()) {
node temp;
temp.value=x;
v.push_back(temp);
}
else{
v[j].times++;
}
}
sort(v.begin(),v.end(),cmpnode);
for(vector<node>::iterator vit=v.begin();vit!=v.end();vit++){
cout<< vit->value<<" "<<vit->times<<endl;
}
return 0;
}