排列(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;
}
}