日期:2014-05-18  浏览次数:20694 次

一道数学题
前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

------解决方案--------------------
用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);