hhxs_963 2023-02-27 23:32 采纳率: 100%
浏览 25
已结题

九五数算法求简单代码

求精简的代码


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 {
            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) {
                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) {
        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;
            int F = (M - newM) / 99;
            return F;
        }
        return 0;
    }

    public static Map<String, Integer> wei(int M) {
        Map<String, Integer> map = new HashMap<String, Integer>();
        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

  • 写回答

2条回答 默认 最新

  • 社区专家-Monster-XH 2023-02-27 23:41
    关注

    精简后的代码:

    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;
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月8日
  • 已采纳回答 2月28日
  • 创建了问题 2月27日

悬赏问题

  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私