试题编号: | 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的非负整数。
|
问题描述:给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。
package test; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class b_07 { public static void main(String[] args){ Scanner in=new Scanner(System.in); int n=in.nextInt(); int a[]=new int[n]; Map map=new HashMap(); for(int i=0;i<n;i++){ a[i]=in.nextInt(); map.put(a[i], i); } int size=map.size();//查看有多少个不重复的数字,使用hashmap int ans[][]=new int[size][2]; int result=0; Arrays.sort(a); for(int i=n-1;i>=0;i--){ int count=1; if(i==0){ if(a[i]!=a[i+1]){ // ans[result][0]=a[i]; ans[result][1]=count; result++; } break; } while(a[i]==a[i-1]){ count++; i=i-1; if(i==0)break ; } // ans[result][0]=a[i]; ans[result][1]=count; result++; } int temp1=0; int temp2=0; for(int i=0;i<size;i++){ for(int j=0;j<size;j++){ if(ans[i][1]>ans[j][1]){ temp1=ans[i][0]; temp2=ans[i][1]; ans[i][0]=ans[j][0]; ans[i][1]=ans[j][1]; ans[j][0]=temp1; ans[j][1]=temp2; } } } // for(int i=size-1;i>=0;i--){ // int count2=1; // if(i==0){ // if(ans[i][1]!=ans[i+1][1]){ // //// ans[result][0]=a[i]; //// ans[result][1]=count; //// result++; // count2=1; // } // break; // } // while(ans[i][1]==ans[i-1][1]){ // // count2++; // i=i-1; // if(i==0)break ; // } // // System.out.println(ans[i][0]+":"+count2); // //// ans[result][0]=a[i]; //// ans[result][1]=count; //// result++; // // if(count2>1){ // int temp3=0; // // for(int k=i+count2-1;k>=i;k--){ // for(int j=i+count2-1;j>=i;j--){ // if(ans[k][0]<ans[j][0]){ // temp1=ans[i][0]; // // ans[i][0]=ans[j][0]; // // ans[j][0]=temp1; // // } // } // } // } // } for(int i=0;i<size;i++){ for(int j=0;j<2;j++){ if(ans[i][j] != 0){ System.out.print(ans[i][j]+" "); } } System.out.println(); } int same = 1; int sameTemp = 0; int sameChange = 0; for(int i=0;i<map.size()-1;i++){ //比较的时候如果是逐一比较则不需要 if(ans[i][1] == ans[i+1][1]){ same ++; }else{ same = 1; } System.out.println("Same:"+same); if(same > 1){ sameTemp = 0; while( sameTemp != same-1){ if(ans[i-sameTemp][0] > ans[i+1-sameTemp][0]){ sameChange = ans[i-sameTemp][0]; ans[i-sameTemp][0] = ans[i+1-sameTemp][0]; ans[i+1-sameTemp][0] = sameChange; } sameTemp ++; } } } for(int i=0;i<size;i++){ for(int j=0;j<2;j++){ if(ans[i][j] != 0){ System.out.print(ans[i][j]+" "); } } System.out.println(); } } }