12.蓝桥杯之填算式

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

看这个算式:
☆☆☆ + ☆☆☆ = ☆☆☆
如果每个五角星代表 1 ~ 9 的不同的数字。
这个算式有多少种可能的正确填写方法?
173 + 286 = 459
295 + 173 = 468
173 + 295 = 468
183 + 492 = 675
以上都是正确的填写法!
注意:
111 + 222 = 333 是错误的填写法!
因为每个数字必须是不同的!
也就是说:1~9中的所有数字,每个必须出现且仅出现一次!
注意:
不包括数字“0”!
注意:
满足加法交换率的式子算两种不同的答案。
所以答案肯定是个偶数!
注意:
只要求计算不同的填法的数目
不要求列出所有填写法


package exe11_15;

public class Exe12 {
	
	static int count = 0;
	
	public static void main(String[] args) {
		int  number[] = new int[9];
		for (int i = 0; i < number.length; i++) {
			number[i] = i+1;
		}
		dfs(number,0);
		System.out.println(count);
	}

	private static void dfs(int[] number, int begin) {
		if (begin>=number.length) {
			check(number);
			return ;
		}
		for (int i = begin; i < number.length; i++) {
			swap(number,begin,i);
			dfs(number, begin+1);
			swap(number, begin, i);
		}
	}

	private static void swap(int[] number, int begin, int i) {
		int temp = number[begin];
		number[begin] = number[i];
		number[i] = temp;
	}

	private static void check(int[] number) {
		int left = multiply(number,0,2);
		int center = multiply(number,3,5);
		int right = multiply(number,6,8);
		if (left+center==right) {
			System.out.println(left+"+"+center+"="+right);
			count++;
		}
	}

	private static int multiply(int[] number, int begin, int end) {
		int sum = 0;
		for (int i = begin; i <= end; i++) {
			sum = sum*10+number[i];
		}
		return sum;
	}

}


支付宝扫红包,让我能够买杯咖啡,继续创作,谢谢大家!
在这里插入图片描述

猜你喜欢

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