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

看下面的算式:
□□ 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();
		}
	}

	
}


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值