用0~9使等式##*#=#*##=###成立,数字不重复
编写程序,用数字1,2,3,4,5,6,7,8,9代替一下算式中的#,使等式成立。
##*#=#*##=###
要求9个数字都必须用到。
##*#=#*##=###
要求9个数字都必须用到。
正好前几天用递归解决了遍历m个元素取k个的问题,今天用同样的思路做出了全排列。
每次循环都要开一个新数组,内存开销大。
也可以把九个数字转成StringBuilder,是否内存占用会变小?如果不用递归,应该如何解决呢?
------Output------
29*6=3*58=174
58*3=6*29=174
39*4=2*78=156
78*2=4*39=156
import java.util.*; public class Equation{ public static void main(String[] args){ final int N = 9; int[] num = new int[N]; for(int i = 0; i < N; i++){ num[i] = i+1; } rank(num, num.length-1); } /** * 验证算式##*#=#*##=### * 一共三个表达式 */ public static void confirmEquation(int[] arr){ int x1 = arr[0]*10+arr[1]; int x2 = arr[2]; int x3 = arr[3]; int x4 = arr[4]*10+arr[5]; int x5 = arr[6]*100+arr[7]*10+arr[8]; if(x1*x2 == x5 && x3*x4 == x5){ System.out.println(x1 + "*" + x2 + "=" + x3 + "*" + x4 + "=" + x5); } } /** * 从右向左调整数组元素 * index为正在排序的最大位索引 * 由于此处形参是引用传递,为免影响原数组,开一个新数组进行处理 */ public static void rank(int[] num, int index){ int temp; if(index == 0){ confirmEquation(num); } else{ for(int i = 0; i <= index; i++){ //i=index则不交换 int[] arr = Arrays.copyOf(num, num.length); temp = arr[index]; arr[index] = arr[i]; arr[i] = temp; rank(arr, index-1); } } } }
版权声明:本文为博主原创文章,未经博主允许不得转载。