题目大意:
输入N和M,N就是N次测试,M是说每次测试产生的数据个数,数据范围在1-10000之间。现要求统计输出N次测试中数据出现次数第二多的所有数。当输入0,0时结束。

样例:
4 5
20 33 25 32 99
32 86 99 25 10
20 99 10 33 86
19 33 74 99 32
3 6
2 34 67 36 79 93
100 38 21 76 91 85
32 23 85 31 88 1
0 0
Sample Output

32 33
1 2 21 23 31 32 34 36 38 67 76 79 88 91 93 100

分析:先统计,然后排序(用Arrays.sort()就可以了),注意输出的时候要按 play 的 num 的升序输出。

AC代码:

Java代码 复制代码 收藏代码
  1. import java.util.Scanner;
  2. import java.util.Arrays;
  3. class play implements Comparable {
  4. int num; //N次测试中出现的数字
  5. int s; //此数字在N次测试中出现的次数
  6.  
  7. public int compareTo(Object o) {
  8. play b=(play)o;
  9. if(this.s==b.s) //s相等,按num升序
  10. return this.num-b.num;
  11. else
  12. return b.s-this.s; //按s从大到小降序排
  13. }
  14.  
  15. public String toString(){
  16. return "["+num+","+s+"]";
  17. }
  18. }
  19.  
  20. public class Main{
  21. public static void main(String args[]){
  22. int n,m;
  23. Scanner in=new Scanner(System.in);
  24. while(true){
  25. n=in.nextInt();
  26. m=in.nextInt();
  27. play p[]=new play[10001]; //数据范围在1-10000,数据i用play[i]来记录相关信息
  28. for(int i=0;i<10001;i++)
  29. p[i]=new play();
  30. int temp;
  31. if(n==0 && m==0)
  32. break;
  33. for(int i=0;i<n;i++)
  34. for(int j=0;j<m;j++)
  35. {
  36. temp=in.nextInt();//测试中出现的数字
  37.  
  38. p[temp].num=temp;//记录这个数字
  39. p[temp].s++; //记录此数字出现的次数
  40. }
  41. Arrays.sort(p); //将p按s降序排序
  42.  
  43. int i=1;
  44.  
  45. while(p[i].s==p[i+1].s) //从下标1开始输出所有出现次数第二多的数字
  46. {
  47. System.out.printf("%d ",p[i].num);
  48. i++;
  49. }
  50.  
  51. System.out.printf("%d\n",p[i].num);
  52. }
  53. }
  54. }