您的位置:首页 > 其它

蓝桥杯 两个两位数相乘等于一个两位数乘以一个三位数

2015-03-23 21:54 399 查看
看下面的算式:

□□ 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 .....

请编程,输出所有可能的情况! 注意:

左边的两个乘数交换算同一方案,不要重复输出! 不同方案的输出顺序不重要

import java.util.*;

public class Main{
private static List<Vector<Character>> filter;
private static void fullPremutation(Vector<Character> source,Vector<Character> result){
if(source.size()==0&&isfilter(result)){
boolean exit=false;
int a=(result.elementAt(0)-'0')*10+(result.elementAt(1)-'0');
int b=(result.elementAt(2)-'0')*10+(result.elementAt(3)-'0');
for(int i=0;i<filter.size();i++){
int fa=(filter.get(i).elementAt(0)-'0')*10+(filter.get(i).elementAt(1)-'0');
int fb=(filter.get(i).elementAt(2)-'0')*10+(filter.get(i).elementAt(3)-'0');

if(a==fb&&b==fa){
exit=true;
break;
}
}
if(exit==false){
filter.add(new Vector<Character>(result));
}

}

//对source中的数字1-9进行全排列
for(int i=0;i<source.size();i++){
result.add(source.elementAt(i));
source.remove(i);
fullPremutation(source,result);
source.add(i,(char)result.elementAt(result.size()-1));
result.remove(result.size()-1);
}
}

//判断全排列中的数字是否满足a*b=c*d的条件
private 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;
}

//打印向量数组
private 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));

}

public static void main(String[] args){
Vector<Character> source=new Vector<Character>();
Vector<Character> result=new Vector<Character>();

filter=new ArrayList<Vector<Character>>();

for(int i=1;i<=9;i++){
source.add((char) ('0'+i));
}

fullPremutation(source,result);
for(int i=0;i<filter.size();i++){
print(filter.get(i));
System.out.println();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐