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;
}
}