CCF试题Java-数字排序

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

/**
 * 	
	问题描述
  给定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的非负整数。
 * @author Administrator
 *
 */
public class NumSort {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] num = new int[1001];
		int temp = 0;
		for (int i = 0; i < n; i++) {
			temp = sc.nextInt();
			num[temp] = num[temp] + 1;
		}
		List<Number> list = new ArrayList<Number>();
		for (int i = 0; i < num.length; i++) {
			if (num[i] != 0) {
				list.add(new Number(i, num[i]));
			}
		}
		Comparator<Number> com = new Comparator<Number>() {

			public int compare(Number o1, Number o2) {
				return (int) (o2.getCount() - o1.getCount());
			}
		};

		Collections.sort(list, com);

		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}

	}

}

class Number {

	private int num;
	private int count;

	public Number(int num, int count) {
		super();
		this.num = num;
		this.count = count;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}

	@Override
	public String toString() {
		return num + " " + count;
	}

}

猜你喜欢

转载自blog.csdn.net/kidchildcsdn/article/details/81067057
今日推荐