3.猜算式
看下面的算式:
□□ x □□ = □□ x □□□
它表示:两个两位数相乘等于一个两位数乘以一个三位数。
如果没有限定条件,这样的例子很多。
但目前的限定是:这9个方块,表示1~9的9个数字,不包含0。
该算式中1至9的每个数字出现且只出现一次!
比如:
46 x 79 = 23 x 158
54 x 69 = 27 x 138
54 x 93 = 27 x 186
.....
请编程,输出所有可能的情况!
注意:
左边的两个乘数交换算同一方案,不要重复输出!
不同方案的输出顺序不重要
法一:
public class Main {
static List<Vector<Character>> filteredNonRedundantResults;
static boolean isfilter(Vector<Character> result){
int a=(result.elementAt(0)-'0')*10+(result.elementAt(1)-'0');
int b=(result.elementAt(2)-'0')*10+(result.elementAt(3)-'0');
int c=(result.elementAt(4)-'0')*10+(result.elementAt(5)-'0');
int d=(result.elementAt(6)-'0')*100+(result.elementAt(7)-'0')*10+(result.elementAt(8)-'0');
if(a*b==c*d)
return true;
return false;
}
static void print(Vector<Character> vector){
System.out.printf("%c%cx%c%c=%c%cx%c%c%c", vector.elementAt(0),vector.elementAt(1),vector.elementAt(2),vector.elementAt(3),vector.elementAt(4),vector.elementAt(5),vector.elementAt(6),vector.elementAt(7),vector.elementAt(8));
}
static void fullPermutation(Vector<Character> source,Vector<Character> result){
if(source.size()==0 && isfilter(result)){
boolean exit=false;
for(int i=0;i<filteredNonRedundantResults.size();i++){
int ra=(result.elementAt(0)-'0')*10+(result.elementAt(1)-'0');
int rb=(result.elementAt(2)-'0')*10+(result.elementAt(3)-'0');
int fa=(filteredNonRedundantResults.get(i).elementAt(0)-'0')*10+(filteredNonRedundantResults.get(i).elementAt(1)-'0');
int fb=(filteredNonRedundantResults.get(i).elementAt(2)-'0')*10+(filteredNonRedundantResults.get(i).elementAt(3)-'0');
if(ra==fb && rb==fa){
exit=true;
break;
}
}
if(!exit)
filteredNonRedundantResults.add(new Vector<Character>(result));
return;
}
for(int i=0;i<source.size();i++){
result.addElement(source.elementAt(i));
source.remove(i);
fullPermutation(source,result);
source.add(i,result.elementAt(result.size()-1));
result.removeElementAt(result.size()-1);
}
}
public static void main(String[] args) {
int n=9;
Vector<Character> source=new Vector<Character>();
Vector<Character> result=new Vector<Character>();
for(int i=1;i<=n;i++)
source.add((char)('0'+i));
Main.filteredNonRedundantResults=new ArrayList<Vector<Character>>();
fullPermutation(source, result);
for(int i=0;i<filteredNonRedundantResults.size();i++){
print(filteredNonRedundantResults.get(i));
System.out.println();
}
}
}