• 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);
        }
    }
    
  • 相关阅读:
    自己动手制作更好用的markdown编辑器-03
    自己动手制作更好用的markdown编辑器-02
    自己动手制作更好用的markdown编辑器-01
    使用hexo在github上搭建个人博客
    自己开发前端调试工具:Gungnir
    关于滚动更新的设计技巧
    看看Delphi中的列表(List)和泛型
    一个跟同事闲谈写出来的SQL脚本_算法循环_关系循环
    分享一个多线程实现[冒泡][选择][二分法]排序的例子
    八皇后回溯计算法研究
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13077455.html
Copyright © 2020-2023  润新知