问题描述
给定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的非负整数。
思路
我首先建立三个数组,一个存放输入进来的数,一个存放输入进来的数出现的次数,最后一个存放输入进来去掉重复的数。给他设置判断条件,有一个小问题就是在判断条件里面最后一个数是无法判断的,你需要单独设置一个if条件来给他进行判断。最后输出的情况下,你直接拿一个循环和赢存放进去的次数相比较,如果有相等的就直接输出。
代码
import java.util.Arrays;
import java.util.Scanner;
public class Two {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int arr[] = new int[n];
int array[] = new int[n];
int arrayy[] = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = in.nextInt();
}
int count = 1;
int temp = 0;
Arrays.sort(arr);// 排序成1 2 2 2 3 3 3 3 4 5 5 5.
for (int i = 1; i <= n-1 ; i++) {
if (arr[i-1] == arr[i ]) {
count++;// 记录每1个数出现的次数
}else{
array[temp]=arr[i-1];//将arr数组中的数存入到array数组当中
arrayy[temp]=count;//将出现的次数存入到arrayy数组当中
count=1;
temp++;
}
if(i==n-1){
array[temp]=arr[i];
arrayy[temp]=count;
count=1;
temp++;
}
}
for (int i = n; i>0; i--) {
for (int j = 0; j < arrayy.length; j++) {
if(arrayy[j]==i){
System.out.println(array[j]+" "+arrayy[j]);
}
}
}
}
}
满分。