一、Problem
現在小學的數學題目也不是那麼好玩的。
看看這個寒假作業:
□ + □ = □
□ - □ = □
□ × □ = □
□ ÷ □ = □
每個方塊代表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
二、Solution
方法一:全排列
奔跑吧程序…😂
import java.util.*;
import java.math.*;
import java.io.*;
public class Main{
static class Solution {
int[] A = {1,2,3,4,5,6,7,8,9,10,11,12,13};
int N = A.length, res;
double exp = 1e-6;
boolean[] vis;
void init() {
Scanner sc = new Scanner(new BufferedInputStream(System.in));
vis = new boolean[N];
perm(0, new int[13]);
System.out.println(res);
}
boolean check(int[] a) {
boolean b1 = a[0] + a[1] == a[2];
boolean b2 = a[3] - a[4] == a[5];
boolean b3 = a[6] * a[7] == a[8];
boolean b4 = a[11]* a[10] == a[9];
return b1 && b2 && b3 && b4;
}
void perm(int k, int[] a) {
if (k == N) { if (check(a)) res++;
return;
}
for (int i = 0; i < N; i++) {
if (i > 0 && A[i-1] == A[i] && !vis[A[i-1]])
continue;
a[k] = A[i];
vis[i] = true;
perm(k+1, a);
vis[i] = false;
}
}
}
public static void main(String[] args) throws IOException {
Solution s = new Solution();
s.init();
}
}
複雜度分析
- 時間複雜度:,
- 空間複雜度:,
方法二:dfs
全排列太慢了,用剪枝吧…
import java.util.*;
import java.math.*;
import java.io.*;
public class Main{
static class Solution {
int[] A = {1,2,3,4,5,6,7,8,9,10,11,12,13};
int N = A.length, res;
boolean[] vis;
double exp = 1e-6;
void dfs(int x, int[] a) {
if (x == 3) if (a[0] + a[1] != a[2]) return;
if (x == 6) if (a[3] - a[4] != a[5]) return;
if (x == 9) if (a[6] * a[7] != a[8]) return;
if (x == 12)if (Math.abs((a[9]*1.0) / a[10] - a[11])<= exp) {
res++;
return;
}
for (int i = 0; i < N; i++) {
if (vis[i] || i > 0 && A[i-1] == A[i] && !vis[A[i-1]])
continue;
a[x] = A[i];
vis[i] = true;
dfs(x+1, a);
vis[i] = false;
}
}
void init() {
Scanner sc = new Scanner(new BufferedInputStream(System.in));
vis = new boolean[N];
dfs(0, new int[N]);
System.out.println(res);
}
}
public static void main(String[] args) throws IOException {
new Solution().init();
}
}
複雜度分析
- 時間複雜度:,
- 空間複雜度:,