• java 寒假作业


    寒假作业

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

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

    (如果显示不出来,可以参见【图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

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

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

    public class Main {
    	static int num = 0;
    	static int[] a = new int[13];  //存下标对应1-12数字
    	static boolean[] b = new boolean[14];  //标记是否已经被用了
        public static void dfs(int k)
        {
        	if(k == 4) if(a[1] + a[2] != a[3]) return;	//每次进行每个要求的判定,能减少很多时间
    		if(k == 7) if(a[4] - a[5] != a[6]) return;
    		if(k == 10) if(a[7] * a[8] != a[9]) return;
    		if(k == 13) if(a[10] != a[11] * a[12]) return;
    		if(k == 13)  {
    			num++;
    			return;
    		}
    			
        	for(int i = 1; i <14; i++) {		//每次赋值,dfs
        		if(b[i] == false) {
        			b[i] =true;
        			a[k] = i;
        			dfs(k+1);
        			a[k] = 0;
        			b[i] = false;
        		}
        	}
           
        }
        
        public static void main(String[] args)
        {
        	dfs(1);
        	System.out.print(num);
        }
    }
    

    代码改了又改,简单的dfs暴力运行的话,会运行比较久,可能还运行不出来
    加上每次的判定,返回,时间会减少很多。

    64

  • 相关阅读:
    BSGS
    斯特林数 笔记
    「CF932E」Team Work
    「hihoCoder1869」Items
    「Luogu1345」[USACO5.4]奶牛的电信Telecowmunication
    「Luogu4363/BZOJ5248」[九省联考2018]一双木棋chess
    「Luogu2522」[HAOI2011]Problem b
    狄利克雷卷积学习笔记
    莫比乌斯函数学习笔记
    欧拉函数学习笔记
  • 原文地址:https://www.cnblogs.com/ohuo/p/12232509.html
Copyright © 2020-2023  润新知