凑算式
B DEF
A + --- + ------- = 10
C GHI
(如果显示有问题,可以参见【图1.jpg】)
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。
思路:最简单思路(个人认为)对1~9进行全排列暴力破解,然后进行数学判断结果,符合则由text()方法判断后返回,permute()方法输出;
package Lqb;
import java.util.Arrays;
import javax.swing.Spring;
public class Text12 {
static int h=0;
public static void main(String[] args) {
int[] array={1,2,3,4,5,6,7,8,9};
permute(array,0);
}
//数组验证
public static int[] text(int[] b){
int a=b[0]; //A
int B=b[1]; //B
int c=b[2]; //C
int y=b[3]*100+b[4]*10+b[5]; //DEF
int x=b[6]*100+b[7]*10+b[8]; //GHI
if(a+(B*(x/c)+y)/x==10&&(B*x/c+y)%x==0&&x%c==0){
return b;
}
return null;
}
//数组重组(全排列)
public static void permute(int[] array,int start){
if(start==array.length-1&&text(array)!=null){ //当start(数组指向的数为最后一个时),也就是可交换数到了最后一个
System.out.print(++h+" "+Arrays.toString(text(array)));
System.out.println();
}
for(int i=start;i<array.length;i++){
swap(array,start,i); //数组指向的数依次与后面每一个交换(遍历第一个数的所有可能位置)
permute(array,start+1);
swap(array,start,i); //重置
}
}
//交换
public static void swap(int[] array,int start,int end){
int t=array[start];
array[start]=array[end];
array[end]=t;
}
}