3、蓝桥杯之猜算式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sword_anyone/article/details/89072222

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

请编程,输出所有可能的情况!
注意:
左边的两个乘数交换算同一方案,不要重复输出!
不同方案的输出顺序不重要


package exe1_5;

import java.util.ArrayList;
import java.util.List;

public class Exe3 {
	
	static List<String> copy = new ArrayList<String>();
	
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<Integer>();
		for (int i = 1; i < 10; i++) {
			list.add(-1);
		}
		dfs(list,0);
	}

	private static void dfs(List<Integer> list, int begin) {
		if (begin>=list.size()) {
			checkAndShow(list);
			return ;
		}
		for (int i = 1; i <= list.size(); i++) {
			if (!list.contains(i)) {
				list.set(begin, i);
				dfs(list, begin+1);
				list.set(begin, -1);
			}
		}
	}
	
	

	private static void checkAndShow(List<Integer> list) {
		int a = multiply(list, 0, 1);
		int b = multiply(list, 2, 3);
		int c = multiply(list, 4, 5);
		int d = multiply(list, 6, 8);
		if (a*b==c*d) {
			String string = a+"*"+b+"="+c+"*"+d;
			String string2 = b+"*"+a+"="+c+"*"+d;
			if (copy.contains(string)) {
				return ;
			}
			else{
				copy.add(string2);
				System.out.println(list);
			}
		}
	}

	private static int multiply(List<Integer> list, int begin, int end) {
		int sum =0 ;
		for (int i = begin; i <=end ; i++) {
			sum = sum*10 + list.get(i);
		}
		return sum;
	}



}

打赏一点钱,帮我买杯咖啡,继续创作,谢谢大家!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sword_anyone/article/details/89072222