算法提高 寻找三位数
描述
将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成
1:2:3的比例,试求出所有满足条件的三个三位数。
例如:三个三位数192,384,576满足以上条件。
输入
输入描述:
无输入文件
输入样例:
输出
输出描述:
输出每行有三个数,为满足题设三位数。各行为满足要求的不同解。
输出样例:
代码思路:
利用Hashset的性质,只能add不同的数据,构造方法判断组成的数中不相同,用三个if组成,判断1-9的数字不同组合,因为是1:2:3的比例,得到第一个数就*2和*三,得到第二和第三给数,只找第一个数就可以,最后得出答案。
注意要提前排除数字0的干扰。
mport java.util.HashSet;
import java.util.Set;
public class old1147 {
//当整型时
public static boolean isNum(int num){
String strNum=String.valueOf(num);
Set<Integer> list=new HashSet<>();
list.add(0);
for (int i = 0; i < strNum.length(); i++) {
if(!list.add(strNum.charAt(i)-'0')) return false;
}
return true;//是符合条件
}
//字符串型
public static boolean isNum(String num){
Set<Integer> list=new HashSet<>();
list.add(0);
for (int i = 0; i < num.length(); i++) {
if(!list.add(num.charAt(i)-'0')) return false;
}
return true;//是符合条件
}
public static void main(String[] args) {
for (int i = 100; i < 1000; i++) {
String sum="";
sum+=i;
if(isNum(i)){
int twoNum=i*2;
sum+=twoNum;
if(isNum(twoNum)){
int threeNum=i*3;
sum+=threeNum;
if(isNum(threeNum)){
if(isNum(sum)&&threeNum-twoNum-i==0){
System.out.printf("%d %d %d",i,twoNum,threeNum);
}
}
}
}
}
}
}