排列(permutation)

排列(permutation)

       用1,2,3,...,9组成3个三位数 abc,def 和 ghi,每个数字恰好使用一次,要求 abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。

【分析】

(分析过程附加在代码注释中)

用java语言编写程序,代码如下:

public class Permutation {
	public static void main(String[] args) {
		for(int i = 123; i < 333; i++) {
			int j = i * 2;
			int k = i * 3;
			
			if(check(i, j, k))
				System.out.println(i + " " + j + " " + k);
		}
	}
	
	//检查三个数i,j,k中每位数是否恰好使用一次。如果是,返回true,反之,返回false。
	public static boolean check(int i, int j, int k) {
		// TODO Auto-generated method stub
		int temp1 = 45;// 1,2,3,...,9 的和
		int temp2 = 362880;// 1,2,3,...,9 的乘积
		
		//分割这三个数i,j,k
		int[] ia = divideNum(i);
		int[] ja = divideNum(j);
		int[] ka = divideNum(k);
		
		int result_add = 0;
		int result_multi = 1;
		
		//将每个数的位的值相加;将每个数的位的值相乘
		for(int x = 0; x < 3; x++) {
			result_add += ia[x] + ja[x] + ka[x];
			result_multi *= ia[x] * ja[x] * ka[x];
		}
		
		if(result_add == temp1 && result_multi == temp2)
			return true;
		return false;
	}
	
	//将一个三位数的数进行分割,它的每位数都依次存于数组中
	public static int[] divideNum(int n) {
		int[] a = new int[3];
		a[0] = n / 100;
		a[1] = n % 100 / 10;
		a[2] = n % 10;
		return a;
	}
}


你可能感兴趣的:(java,数学,排列)