試題編號: | 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;
}