前2日五一看见已到数学题:用1,2,3,4,5,6,7,8,9九个数字组成三个三位数(每个数字只能用一次),使第二个数字是第一个数字的2倍,第三个数字是第一个数字的三倍。请写出这三个数。
用Java写出一个解决方法:
/**
 * 
 */
package com.bch;import java.util.HashSet;
import java.util.Set;/**
 * @author Administrator
 * 
 */
public class Test { /**
 * @param args
 */
public static void main(String[] args) {
Set<Character> set = new HashSet<Character>();
for (int i = 123; i <= 329; i++) {
char[] str = (0 + String.valueOf(i) + String.valueOf(i * 2) + String
.valueOf(i * 3)).toCharArray();
for (int j = 0; j < str.length; j++) {
// set.clear();
set.add(str[j]);
}
// System.out.println(set.toString());
if (set.toArray().length == 10) {
System.out.println(String.valueOf(i) + ","
+ String.valueOf(i * 2) + "," + String.valueOf(i * 3));
set.clear();
} else {
set.clear();
}
}
}
}java

解决方案 »

  1.   

    用char数组处理想法不错 感觉比我的想法好.
    List<Integer> results = new ArrayList<Integer>();
    Set<Integer> temp = new HashSet<Integer>();
    int[] a = new int[9];
    for(int i=160;i<987/3;i++){
     a[0] = i/100;
     a[1]=(i-a[0]*100)/10;
     a[2] = i-a[0]*100-a[1]*10;
     
     a[3] = 2*i/100;
     a[4]=(2*i-a[3]*100)/10;
     a[5] = 2*i-a[3]*100-a[4]*10;
     
     a[6] = 3*i/100;
     a[7]=(3*i-a[6]*100)/10;
     a[8] = 3*i-a[6]*100-a[7]*10;
     temp.clear();
    for(int x=0;x<9;x++){
    if(a[x]==0) break;
    temp.add(a[x]);
    }
    if(temp.size()==9)results.add(i);
    }
    System.out.println(results.size());
    System.out.println(results);
      

  2.   

    当时看见是用Python实现的,只用了一句代码。
    [(i, i*2, i*3) for i in range(123, 329) if len(set(str.format("0{0}{1}{2}", i, 2*i, 3*i))) == 10]