Java的一个算法题,求解

时间:2022-10-29 11:17:03
凑算式

     B      DEF
A + --- + ------- = 10
     C      GHI
 
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。

比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。

这个算式一共有多少种解法?

注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。

     8      952
6 + --- + ------- = 10
     3      714

     3      972
5 + --- + ------- = 10
     1      486


如果有大神路过,希望大神给个思路,思路最好详细一点,如果给代码的话,希望不要太复杂。。。

其实这个题目是蓝桥杯上一届的原题,如果各位兄弟朋友有题目的答案,那更是感激不尽了

Java的一个算法题,求解

12 个解决方案

#1


递归,全排列,然后再加条件过滤剪枝。

#2


全排列的话有多少种排列方式啊,电脑都吃不消

#3


引用 2 楼 sugarless_ 的回复:
全排列的话有多少种排列方式啊,电脑都吃不消

好吧,我试了一下,算的很快,29种解法

#4



public class Lqb {

public static double value=0;
public static int count=0;
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a={1,2,3,4,5,6,7,8,9};
long s=System.currentTimeMillis();
permutation(0,a.length-1,a);
System.out.println("共有"+count+"种");
System.out.println("耗时"+(System.currentTimeMillis()-s));
}

private static void permutation(int s, int e, int[] a) {
// TODO Auto-generated method stub
if(s==e){
operation(a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);
}else{
for(int i=s;i<=e;i++){
int t=a[s];
a[s]=a[i];
a[i]=t;
permutation(s+1,e,a);
a[i]=a[s];
a[s]=t;
}
}
}

private static void operation(int a, int b, int c, int d, int e, int f, int g, int h, int i) {
// TODO Auto-generated method stub
value=a+1.0*b/c+1.0*Integer.parseInt(""+d+e+f)/Integer.parseInt(""+g+h+i);
if(value==10){
count++;
System.out.println("  "+b+"      "+d+e+f);
System.out.println(a+"+---+-------=10");
System.out.println("  "+c+"      "+g+h+i);
System.out.println("\n");
}
}

}


此楼49分;可以结贴了

#5


Java的一个算法题,求解

#6


引用 5 楼 Sunxanxiao 的回复:
Java的一个算法题,求解
正解正解,牛批牛批

#7


该回复于2018-01-30 11:39:17被管理员删除

#8


该回复于2018-01-31 13:31:43被管理员删除

#9


该回复于2018-01-31 13:30:49被管理员删除

#10


该回复于2018-01-31 13:30:49被管理员删除

#11


第一个数字一定是整数

第二和第三个数组成的分数中的分母很重要,因为它决定了下一个分母的模

以上两数相加减十是后六位应该生成的值,并且分母与前一个分母同模。


就是不知道这样会不会比五楼的更快

#12


引用 11 楼 zhouchongzxc 的回复:
第一个数字一定是整数

第二和第三个数组成的分数中的分母很重要,因为它决定了下一个分母的模

以上两数相加减十是后六位应该生成的值,并且分母与前一个分母同模。


就是不知道这样会不会比五楼的更快


对于计算机,这点计算量不算大吧。。

#1


递归,全排列,然后再加条件过滤剪枝。

#2


全排列的话有多少种排列方式啊,电脑都吃不消

#3


引用 2 楼 sugarless_ 的回复:
全排列的话有多少种排列方式啊,电脑都吃不消

好吧,我试了一下,算的很快,29种解法

#4



public class Lqb {

public static double value=0;
public static int count=0;
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a={1,2,3,4,5,6,7,8,9};
long s=System.currentTimeMillis();
permutation(0,a.length-1,a);
System.out.println("共有"+count+"种");
System.out.println("耗时"+(System.currentTimeMillis()-s));
}

private static void permutation(int s, int e, int[] a) {
// TODO Auto-generated method stub
if(s==e){
operation(a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);
}else{
for(int i=s;i<=e;i++){
int t=a[s];
a[s]=a[i];
a[i]=t;
permutation(s+1,e,a);
a[i]=a[s];
a[s]=t;
}
}
}

private static void operation(int a, int b, int c, int d, int e, int f, int g, int h, int i) {
// TODO Auto-generated method stub
value=a+1.0*b/c+1.0*Integer.parseInt(""+d+e+f)/Integer.parseInt(""+g+h+i);
if(value==10){
count++;
System.out.println("  "+b+"      "+d+e+f);
System.out.println(a+"+---+-------=10");
System.out.println("  "+c+"      "+g+h+i);
System.out.println("\n");
}
}

}


此楼49分;可以结贴了

#5


Java的一个算法题,求解

#6


引用 5 楼 Sunxanxiao 的回复:
Java的一个算法题,求解
正解正解,牛批牛批

#7


该回复于2018-01-30 11:39:17被管理员删除

#8


该回复于2018-01-31 13:31:43被管理员删除

#9


该回复于2018-01-31 13:30:49被管理员删除

#10


该回复于2018-01-31 13:30:49被管理员删除

#11


第一个数字一定是整数

第二和第三个数组成的分数中的分母很重要,因为它决定了下一个分母的模

以上两数相加减十是后六位应该生成的值,并且分母与前一个分母同模。


就是不知道这样会不会比五楼的更快

#12


引用 11 楼 zhouchongzxc 的回复:
第一个数字一定是整数

第二和第三个数组成的分数中的分母很重要,因为它决定了下一个分母的模

以上两数相加减十是后六位应该生成的值,并且分母与前一个分母同模。


就是不知道这样会不会比五楼的更快


对于计算机,这点计算量不算大吧。。