现有填字游戏:
SEVEN
* 7
FORTY9
该式表示一个乘法算式,式中SEVEN是一个5位数,FORTY9是一个6位数,相同的字母代表相同的数字,不同的字母代表不同的数字,并且这些字母表示的数字都不等于9。编程,找出所有可能的解(本题共有3组解)。
import java.util.Scanner;
import java.util.Arrays;
public final class Seven{
private int[] data;
private boolean[] used;
private int[] selected;
private int count;
public Seven(){
data=new int[]{0,1,2,3,4,5,6,7,8,9};
used=new boolean[data.length];
Arrays.fill(used,false);
count=9;
selected=new int[count];
}
private void found(){
long top=((long)selected[0])*10000+selected[1]*1000+selected[2]*100+selected[3]*10+7;
long bottom=((long)selected[4])*100000+selected[5]*10000+selected[6]*1000+selected[7]*100+selected[8]*10+9;
selected[1]=selected[3];
if(top*7==bottom&&selected[0]!=0&&selected[5]!=0&&selected[0]!=7&&selected[0]!=9&&selected[1]!=7&&selected[1]!=9&&selected[2]!=7&&selected[2]!=9&&selected[4]!=7&&selected[4]!=9&&selected[5]!=7&&selected[5]!=9&&selected[6]!=7&&selected[6]!=9&&selected[7]!=7&&selected[7]!=9&&selected[8]!=7&&selected[8]!=9){
System.out.println(" "+top);
System.out.println(" 7");
System.out.println("*-----");
System.out.println(" " + bottom);
System.out.println();
}
}
public void permute(){
permute(0);
}
private void permute(int n){
if(n<count){
for(int i=0;i<data.length;++i){
if(!used[i]){
selected[n]=data[i];
used[i]=true;
permute(n+1);
used[i]=false;
}
}
}
else{
found();
}
}
public static void main(String[] args){
Seven e=new Seven();
e.permute();
}
}