題目描述
湊算式

這個算式中A ~ I代表1~9的數字,不同的字母代表不同的數字,
比如:
6+8/3+952/714 就是一種解法,
5+3/1+972/486 是另一種解法,
這個算式一共有多少種解法?
注意:你提交應該是個整數,不要填寫任何多余的內容或說明性文字,
解題思路
網上普遍采用暴力解法,大致思路是使用九層for回圈,我這用的方法是遞回演算法,
本題是分數運算,浮點數運算存在誤差,可轉換為整數運算,避免誤差,即
c*ghi*(10-a)==b*ghi+c*def
參考代碼
public class Digui {
static int count = 0;
static int[] res=new int[9];
static int[] v=new int[9];
public static void main(String[] args) {
dfs(0);
System.out.println(count);
}
private static void dfs(int k) {
if(k==9) {
if(check())
count++;
}
for (int i = 0; i < 9; i++) {
if(v[i]==0){
v[i] = 1;//標注該位置是否已填數字
res[k] = i+1;
dfs(k+1);
v[i] = 0;//遞回后清除
}
}
}
private static boolean check() {
int a=res[0],b=res[1],c=res[2],
def=res[3]*100+res[4]*10+res[5],
ghi=res[6]*100+res[7]*10+res[8];
if(c*ghi*(10-a)==b*ghi+c*def) {
return true;
}else {
return false;
}
}
}
參考答案:29
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/261487.html
標籤:java
上一篇:python爬蟲入門(1)
