编程之美

来源:互联网 发布:淘宝上回收手机可靠吗 编辑:程序博客网 时间:2024/06/02 05:27

问题导读:


给你一副杂乱的扑克牌(不包括大小王),任意从其中抽出一张牌,怎样用最简单的方法来知道抽出的是1~13中的那一张?(不要求知道花色)

注:类似题目


解决方案:


package Chapter1;import java.util.HashMap;import java.util.Map;import java.util.Map.Entry;public class Func_1_5 {    /*    给你一副杂乱的扑克牌(不包括大小王),任意从其中抽出一张牌,怎样用最简单的方法来知道抽出的是1~13中的那一张?(不要求知道花色)     */    int func1(int []arr, int flag) {        // 利用 map,统计每张扑克牌出现的次数,最后找出次数为3的扑克牌        Map<Integer, Integer> map = new HashMap<>();        for (int a : arr) {            if (map.containsKey(a)) {                map.put(a, map.get(a) + 1);            } else {                map.put(a, 1);            }        }        for (Entry<Integer, Integer> e : map.entrySet()) {            if (e.getValue() == flag) return e.getKey();        }        return 0;    }    Map<Integer, Integer> func2(int []arr, int flag) {        // 不储存满状态的元素        Map<Integer, Integer> map = new HashMap<>();        for (int a : arr) {            if (map.containsKey(a)) {                map.put(a, map.get(a) + 1);                if (map.get(a) == flag) {                    map.remove(a); // 满状态,直接删除                }            } else {                map.put(a, 1);            }        }        return map;    }    int func3(int []arr) {        int res = 0;        // 自异或 为 0        // 和0异或 为 本身        for (int a : arr) {            res ^= a;        }        return res;    }    int func4(int []arr, int total) {        // 原始和 - 剩余和        int sum = 0;        for (int a : arr) {            sum += a;        }        return total - sum;    }    public static void main(String []args) {        Func_1_5 f = new Func_1_5();        int []arr = new int[13*4 -1];        for (int i = 1; i <= arr.length; i++) {            arr[i-1] = i%13 == 0 ? 13 : i%13;        }        int res_1 = f.func1(arr, 3);        System.out.println("res_1 : " + res_1);        Map<Integer, Integer> map = f.func2(arr, 4);        for(Entry<Integer, Integer> e : map.entrySet()) {            System.out.println("res_2 : " + e.getKey());        }        int res_3 = f.func3(arr);        System.out.println("res_3 : " + res_3);        int res_4 = f.func4(arr, 13 * 7 * 4);        System.out.println("res_4 : " + res_4);    }}