輸出距離平均值距離最近的三個數

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章