凑算式
B DEF
A±-- + -------= 10
C GHI
(如果显示有问题,可以参见【图1.jpg】)
这个算式中AI代表19的数字,不同的字母代表不同的数字.
比如:
6+8/3+952/714就是一种解法,5+3/1+972/486是另一种解法.
这个算式一共有多少种解法?
注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字.
递归回溯生成全排列:
这道题使用这个套路非常的方便
static void f(k){
if(k==9){//一种排列产生后的判断
if(check())
ans++;
}
for(int i=0;i<9;i++){
{int t=a[i];a[i]=a[k];a[k]=a[i]}
f(k+1);//递归
{int t=a[i];a[i]=a[k];a[k]=a[i]}//回溯
}
}
在所有生成无重复全排列的题里,都可以套用这个方法!!!!!!!!!!!
题解:
public class test {
static int[] a={1,2,3,4,5,6,7,8,9};
static int ans=0;
static boolean check(){
int x=a[3]*100+a[4]*10+a[5];
int y=a[6]*100+a[7]*10+a[8];
if ((a[1] * y+a[2] * x)%(a[2] * x)==0 && a[0]+(a[1] * y+a[2] * x)/(a[2] * x) ==10)
return true;
return false;
}
static void f(int k){
if (k==9){
if (check())
ans++;
}
for (int i = k; i < 9; i++) {
int t=a[i];
a[i]=a[k];
a[k]=t;
f(k+1);
t=a[i];
a[i]=a[k];
a[k]=t;
}
}
public static void main(String[] args) {
f(0);
System.out.println(ans);
}
}