因为 double 类型常不能求出精确值,本题最好变成整数问题来做。
上面的分数等式可以变换成:
a[1]*(a[5]*10+a[6]) *(a[8]*10+a[9])+ A[4]*(a[2]*10+a[3]) *(a[8]*10+a[9])
= a[7]*(a[2]*10+a[3]) *(a[5]*10+a[6])
特 别 注 意 到 , 如 果 等 式 左 边 二 个 式 子 交 换 次 序 , 其 实 是 同 一 个 解 , 为 此 不 妨 假 设
a[1]<a[4]。
import java.math.BigInteger;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Hashtable;
public class aa1 {
static int m;
public static void main(String[] args) {
int g,i,k,n;
i=1;
int [] a=new int[10];
n=0;
for (k=1;k<10;k++) a[k]=1;
while(true)
{
g=1;
for (k=i-1;k>=1;k--)
if (a[i]==a[k] || a[1]>a[4]) g=0;
if (i==9 && g==1) {
if (a[1]*(a[5]*10+a[6]) *(a[8]*10+a[9])+ a[4]*(a[2]*10+a[3]) *(a[8]*10+a[9])==
a[7]*(a[2]*10+a[3]) *(a[5]*10+a[6]))
{
n++;
System.out.println(n+" "+a[1]+"/"+(a[2]*10+a[3])+"+"+a[4]+"/"+ (a[5]*10+a[6])
+"="+a[7]+"/"+(a[8]*10+a[9]));
}
}
if (i<9 && g==1) {i++;a[i]=1;continue;}
while (a[i]==9 && i>1) i--; //往前回朔
if (a[i]==9 && i==1) break; //至第 1 个数为 9,结束
else a[i]++; //否则 a[i]加 1 至 9,如果此时 i>1,回朔
}
}
}
5、回嗍法求解变通后桥本分数式
把 0、1、2、……9 填入下式的 9 个方格中,各方格数字不重复,使分式等式成立,有多少
种填法?
import java.math.BigInteger;