ccf_201503-2_數字排序(java&c++)

試題編號: 201503-2
試題名稱: 數字排序
時間限制: 1.0s
內存限制: 256.0MB
問題描述:

問題描述

  給定n個整數,請統計出每個整數出現的次數,按出現次數從多到少的順序輸出。

輸入格式

  輸入的第一行包含一個整數n,表示給定數字的個數。
  第二行包含n個整數,相鄰的整數之間用一個空格分隔,表示所給定的整數。

輸出格式

  輸出多行,每行包含兩個整數,分別表示一個給定的整數和它出現的次數。按出現次數遞減的順序輸出。如果兩個整數出現的次數一樣多,則先輸出值較小的,然後輸出值較大的。

樣例輸入

12
5 2 3 3 1 3 4 2 5 2 3 5

樣例輸出

3 4
2 3
5 3
1 1
4 1

評測用例規模與約定

  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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章