九五数算法求简单代码

求精简的代码


import java.util.*;

public class jiuwushu {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个四位的整数:");
        int M = sc.nextInt();
        int F = F(M);
        if (F != 0) {
            System.out.println(F);
        }

        System.out.println("----------------------------");
        List<Integer> list = TotalM();
        System.out.println("九五数中F(M)能被8整除的所有M为");
        for (Integer integer : list) {
            System.out.print(integer);
            System.out.print("    ");
        }


    }

    /**
     * 判断该数是否为九五数,
     * 九五数:返回 F(M)
     * 非九五数和输入错误:返回 0
     * 详细版
     *
     * @param M
     * @return
     */
    public static int F(int M) {
        if (M >= 10000 || M <= 999) {
            System.out.println("你输入的数字有误");
            return 0;
        } else {
            MapInteger> wei = wei(M);
            int geWei = wei.get("geWei");
            int shiWei = wei.get("shiWei");
            int baiWei = wei.get("baiWei");
            int qianWei = wei.get("qianWei");
            if (qianWei + baiWei == 9 && shiWei + geWei == 5) {
                System.out.println("该数字为九五数");
                int newM = qianWei * 10 + shiWei * 1000 + baiWei + geWei * 100;

                int F = (M - newM) / 99;
                return F;

            } else {
                if (qianWei + baiWei == 9) {
                    System.out.println("该数字不是九五数,原因是个位加十位不等于5");
                } else if (shiWei + geWei == 5) {
                    System.out.println("该数字不是九五数,原因是百位加千位不等于9");

                } else {
                    System.out.println("该数字不是九五数,原因是个位加十位不等于5,并且百位加千位不等于9");
                }
                return 0;

            }
        }

    }

    /**
     * 判断该数是否为九五数,
     * 九五数:返回 F(M)
     * 非九五数和输入错误:返回 0
     * 简略版,针对第二题
     *
     * @param M
     * @return
     */
    public static int jiuWu(int M) {
        MapInteger> wei = wei(M);
        int geWei = wei.get("geWei");
        int shiWei = wei.get("shiWei");
        int baiWei = wei.get("baiWei");
        int qianWei = wei.get("qianWei");
        if (qianWei + baiWei == 9 && shiWei + geWei == 5) {
            int newM = qianWei * 10 + shiWei * 1000 + baiWei + geWei * 100;
            int F = (M - newM) / 99;
            return F;
        }
        return 0;
    }

    public static MapInteger> wei(int M) {
        MapInteger> map = new HashMapInteger>();
        int geWei = M % 10;
        int shiWei = M / 10 % 10;
        int baiWei = M / 100 % 10;
        int qianWei = M / 1000;

        map.put("geWei", geWei);
        map.put("shiWei", shiWei);
        map.put("baiWei", baiWei);
        map.put("qianWei", qianWei);
        return map;
    }

    /**
     * 判断1000-9999中所有满足九五数的,并满足F(M)能被8整出
     * 返回List集合
     *
     * @return
     */
    public static List<Integer> TotalM() {
        List<Integer> Ms = new ArrayList<Integer>();
        for (int i = 1000; i <= 9999; i++) {
            int F = jiuWu(i);
            if (F != 0) {
                if (F % 8 == 0) {
                    Ms.add(i);
                }
            }
        }
        return Ms;
    }
}

img

精简后的代码:

import java.util.*;

public class jiuwushu {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入一个四位的整数:");
        int M = sc.nextInt();
        int F = F(M);
        if (F != 0) {
            System.out.println(F);
        }

        System.out.println("----------------------------");
        List<Integer> list = TotalM();
        System.out.println("九五数中F(M)能被8整除的所有M为: " + list);
    }

    public static int F(int M) {
        if (M < 1000 || M > 9999) {
            System.out.println("你输入的数字有误");
            return 0;
        }
        Map<String, Integer> wei = wei(M);
        int geWei = wei.get("geWei");
        int shiWei = wei.get("shiWei");
        int baiWei = wei.get("baiWei");
        int qianWei = wei.get("qianWei");
        if (qianWei + baiWei == 9 && shiWei + geWei == 5) {
            int newM = qianWei * 10 + shiWei * 1000 + baiWei + geWei * 100;
            return (M - newM) / 99;
        }
        return 0;
    }

    public static Map<String, Integer> wei(int M) {
        Map<String, Integer> map = new HashMap<>();
        map.put("geWei", M % 10);
        map.put("shiWei", M / 10 % 10);
        map.put("baiWei", M / 100 % 10);
        map.put("qianWei", M / 1000);
        return map;
    }

    public static List<Integer> TotalM() {
        List<Integer> Ms = new ArrayList<>();
        for (int i = 1000; i <= 9999; i++) {
            int F = F(i);
            if (F != 0 && F % 8 == 0) {
                Ms.add(i);
            }
        }
        return Ms;
    }
}


666