2020农行软开实习的笔试题,第一题。
编写程序计算10个正整数的平均数,找出这10个数中雨平均值的距离最近的三个数(差值的绝对值)。以距离的大小对这三个数进行排序并输出(距离小的先输出)
输入:[33,44,61,2,36,42,56,81,11,17]
输出:[36,42,33]
思路:
1. 算平均值。
2. 用hashmap,每个数减去平均值,取绝对值,存入key。value就存那个数就行。
3.用一个ArrayList存一下keys,并排序。
4. 把排序后的list的前三个元素当成key,去map里get。
注意的点:list的操作涉及add,get。
用map.keySet去遍历,foreach的形式。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.HashMap;
import java.util.Map;
public class NH1{
public static void main(String[] args) {
// 求离平均值最近的三个值。
Integer[] arr = {33,44,61,2,36,42,56,81,11,17};
NH1 nh = new NH1();
Integer[] integer = nh.findn(arr);
for (Object object : integer) {
System.out.println(object.toString());
}
}
public Integer[] findn(Integer[] arr){
Integer[] res = new Integer[3]; //存储结果
// 计算平均值
int sum = 0; //存总和
int ave = 0; //平均值
for(int i:arr){
sum+=i;
}
ave = sum/arr.length;
/*用hashmap,key是数值与平均值的差值的绝对值, value是差值 */
Map<Integer,Integer> map = new HashMap<>();
for(int i= 0; i < arr.length; i++){
map.put(Math.abs(arr[i] - ave), arr[i]);
}
/**用List 存一下hashmap的keys */
List<Integer> list = new ArrayList<>();
for(Integer key : map.keySet()){
list.add(key);
}
/*对list排序 */
Collections.sort(list);
for(int i = 0 ; i < 3; i++){
res[i] = map.get(list.get(i));
}
return res;
}
}