zoukankan      html  css  js  c++  java
  • java实现第七届蓝桥杯寒假作业

    题目6、寒假作业

    寒假作业

    现在小学的数学题目也不是那么好玩的。
    看看这个寒假作业:

    □ + □ = □
    □ - □ = □
    □ × □ = □
    □ ÷ □ = □

    (如果显示不出来,可以参见【图1.jpg】)

    每个方块代表1~13中的某一个数字,但不能重复。
    比如:
    6 + 7 = 13
    9 - 8 = 1
    3 * 4 = 12
    10 / 2 = 5

    以及:
    7 + 6 = 13
    9 - 8 = 1
    3 * 4 = 12
    10 / 2 = 5

    就算两种解法。(加法,乘法交换律后算不同的方案)

    你一共找到了多少种方案?

    请填写表示方案数目的整数。
    注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。

    结果:64

    //方法1:DFS搜索
    import java.util.ArrayList;
    
    public class Main {
        public ArrayList<Integer> list = new ArrayList<Integer>();
        public static int count = 0;
        
        public boolean check() {
            int len = list.size();
            if(len >= 3) {
                if(list.get(0) + list.get(1) != list.get(2))
                    return false;
            }
            if(len >= 6) {
                if(list.get(3) - list.get(4) != list.get(5))
                    return false;
            }
            if(len >= 9) {
                if(list.get(6) * list.get(7) != list.get(8))
                    return false;
            }
            if(len >= 12) {
                if(list.get(9) / list.get(10) != list.get(11) || list.get(9) % list.get(10) != 0)
                    return false;
            }
            return true;
        }
        
        public void dfs(int step) {
            if(step == 12) {
                System.out.println(list);
                count++;
                return;
            } else {
                for(int i = 1;i <= 13;i++) {
                    if(list.contains(i))
                        continue;
                    list.add(i);
                    if(check() == false) {   //类似八皇后问题,此处进行减枝操作
                        list.remove(list.indexOf(i));
                        continue;
                    }
                    dfs(step + 1);
                    list.remove(list.size() - 1);
                }
            }
            return;
        }
        
        
        
        public static void main(String[] args) {
            Main test = new Main();
            test.dfs(0);
            System.out.println(count);
        }
    }
    
    //方法2:蛮力枚举
    import java.util.ArrayList;
    import java.util.Collections;
    
    public class Main1 {
        public static long count = 0;
        
        public void printResult() {
            for(int a1 = 1;a1 <= 13;a1++) {
                for(int a2 = 1;a2 <= 13;a2++) {
                    if(a1 == a2 || a1 + a2 > 13)
                        continue;
                    for(int a3 = 1;a3 <= 13;a3++) {
                        for(int a4 = 1;a4 <= 13;a4++) {
                            if(a3 == a4 || a3 - a4 < 1)
                                continue;
                            for(int a5 = 1;a5 <= 13;a5++) {
                                for(int a6 = 1;a6 <= 13;a6++) {
                                    if(a5 == a6 || a5 * a6 > 13)
                                        continue;
                                    for(int a7 = 1;a7 <= 13;a7++) {
                                        for(int a8 = 1;a8 <= 13;a8++) {
                                            if(a7 == a8 || a7 % a8 != 0)
                                                continue;
                                            ArrayList<Integer> list = new ArrayList<Integer>();
                                            list.add(a1);
                                            list.add(a2);
                                            list.add((a1 + a2));
                                            list.add(a3);
                                            list.add(a4);
                                            list.add((a3 - a4));
                                            list.add(a5);
                                            list.add(a6);
                                            list.add((a5 * a6));
                                            list.add(a7);
                                            list.add(a8);
                                            list.add((a7 / a8));
                                            ArrayList<Integer> tempList = new ArrayList<Integer>();
                                            for(int i = 0;i < list.size();i++)
                                                tempList.add(list.get(i));
                                            Collections.sort(list);
                                            boolean judge = true;
                                            for(int i = 1;i < list.size();i++) {
                                                if(list.get(i - 1) == list.get(i)) {
                                                    judge = false;
                                                    break;
                                                }else {
                                                    continue;
                                                }
                                            }
        
                                            if(judge == true) {
                                                System.out.println(tempList);
                                                count++;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    
        public static void main(String[] args) {
            Main1 test = new Main1();
            test.printResult();
            System.out.println(count);
        }
    }
    
  • 相关阅读:
    Java HashMap存储问题
    <转>堆和栈的区别
    Linux shell命令
    DNS(三)DNS SEC(域名系统安全扩展)
    DNS (二)协议
    绕过CDN查找网站真实IP方法
    stream流思想应用
    http接口实现附件对接
    AQS深入分析
    AQS快速入门
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12947637.html
Copyright © 2011-2022 走看看