题目
现在小学的数学题目也不是那么好玩的。
看看这个寒假作业:
每个方块代表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
就算两种解法。(加法,乘法交换律后算不同的方案)
你一共找到了多少种方案?
我的dfs 就学了一点皮毛。
题解 一共12个变量{a,b,c,…}(一共可选13个值)
写12个for循环 一直continue 可节约大量不必要的循环。。
package step6;
import java.util.Scanner;
public class 寒假作业 {
public static void main(String[] args) {
int sum=0;
Scanner sc = new Scanner(System.in);
for(int a =1;a<=13;a++) {
for(int b =1;b<=13;b++) {
if(b==a) continue;
for(int c =1;c<=13;c++) {
if(a+b!=c) continue;
if(c==b||c==a) continue;
for(int d=1;d<=13;d++) {
if(d==b||d==c||d==a) continue;
for(int e =1;e<=13;e++) {
if(e==d||e==c||e==b||e==a)continue;
for(int f=1;f<=13;f++) {
if(d-e!=f)continue;
if(f==e||f==d||f==c||f==b||f==a)continue;
for(int g=1;g<=13;g++) {
if(g==f||g==e||g==d||g==c||g==b||g==a)continue;
for(int h =1;h<=13;h++) {
if(h==g||h==f||h==e||h==d||h==c||h==b||h==a)continue;
for(int i =1;i<=13;i++) {
if(g*h!=i) continue;
if(i==h||i==g||i==f||i==e||i==d||i==c||i==b||i==a)continue;
for(int o =1;o<=13;o++) {
if(o==i||o==h||o==g||o==f||o==e||o==d||o==c||o==b||o==a)continue;
for(int p=1;p<=13;p++) {
if(p==o||p==i||p==h||p==g||p==f||p==e||p==d||p==c||p==b||p==a)continue;
for(int q=1;q<=13;q++) {
if(q==p||q==o||q==i||q==h||q==g||q==f||q==e||q==d||q==c||q==b||q==a)continue;
if(o==q*p) {
sum++;
}
}
}
}
}
}
}
}
}
}
}
}
}
System.out.println(sum);
}
}