您的位置:首页 > 其它

【蓝桥杯练习题】出现次数最多的整数

2015-10-26 18:40 351 查看

问题描述

  编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。

  输入格式:第一行是一个整数N,N £ 20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。

  输出格式:输出只有一行,即出现次数最多的那个元素值。

输入输出样例

样例输入

5

100

150

150

200

250

样例输出

150

代码实现

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;

public class 统计出现最多次数的数 {

//该函数完成统计功能并输出出现次数最多的数
private static void countNum(Integer[] arr){
//用来统计每个数的出现次数,Map的Key表示数,Value表示出现的次数
Map<Integer,Integer> numMap = new HashMap<Integer,Integer>();
for(int i=0; i<arr.length; ++i){
if(numMap.containsKey(arr[i])){
//如果该数已经在出现过,则将该数的次数加一
numMap.put(arr[i], numMap.get(arr[i])+1);
}else{
//若没有出现则加入Map中,次数置为一
numMap.put(arr[i], 1);
}
}
//接下来按照Map的Value值进行降序排列,但由于对Map的排序操作不方便,
//故将Map的数据转换为对应的字符串,然后对字符串进行排序
String[] numStr = new String[numMap.size()];
int i = 0;
for(Entry<Integer,Integer> entry : numMap.entrySet()){
//字符串格式: 次数,数字
numStr[i++] = entry.getValue()+","+entry.getKey();
}
sortStr(numStr);//对数据字符串进行排序
//数组首元素即为要求输出的数字
System.out.println(numStr[0].split(",")[1]);

}

//依赖两种比较条件的排序
private static void sortStr(String[] numStr){
for(int i=0; i<numStr.length; ++i){
//将字符串以“,”为分隔符分割,对分割后的第一部分即次数为主序使用冒泡法进行排序
String[] str1 = numStr[i].split(",");
for(int j=0; j<i; ++j){
String[] str2 = numStr[j].split(",");
if(str1[0].compareTo(str2[0]) > 0){
String temp1 = numStr[i];
numStr[i] = numStr[j];
numStr[j] = temp1;
}else if(str1[0].compareTo(str2[0]) == 0){
//若不同的数字出现次数相同,则按照数字的大小进行升序排列,目的为了将出现次数
//最多的中的最小的数放在数组首位
if(str1[1].compareTo(str2[1]) < 0){
String temp2 = numStr[i];
numStr[i] = numStr[j];
numStr[j] = temp2;
}
}
}
}
}

public static void main(String args[]){
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();//表示要输入数据的个数
Integer[] arr = new Integer
;
for(int i=0; i<n; ++i){
arr[i] = scan.nextInt();
}
countNum(arr);//该函数完成统计功能并输出出现次数最多的数
}
}


运行结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: