题目:将1-9这9个数字分成三个百位数,每个数字只能用一次。
要求:第二个数字是第一个数的2倍,第三个数字是第一个的3倍。 输出所有可能的情况。
思路:
用三层循环,第一位是百位数,第二位是十位数,第三位是个位数。
百位数最大为3,先求第三个数的每一个数,然后再求满足要求的第二个数。
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
/**
* @author LilyLee
* @date 2017年4月26日
* @time 下午4:39:25
* @Version 1.0
* @email lilylee_1213@foxmail.com
*
*/
public class ComposeNum {
public static void main(String[] args) {
Set total=new HashSet();
int m3=0; //第三数的大小
int t1,t2,t3; //第三数的个位、十位、百位数
int n;
int i,j,k;
for(int t=1;t<10;t++){
total.add(t);
}
Set set=new HashSet();
Set lastThree=new HashSet();
for( i=1;i<4;i++){
set.add(i);
for( j=1;j<10;j++){
if(i==j){continue;}
set.add(j);
for( k=1;k<10;k++){
if(k==i||k==j){continue;}
set.add(k);
m3=3*(i*100+j*10+k);
if(m3>987){ //判断是否超过范围
set.remove(k);
continue;
}
t1=m3%10;
if(t1==0){
set.remove(k);
continue;
}
t2=(m3%100)/10;
if(t2==0){set.remove(k);continue;}
t3=(m3/100);
if(t3==0){set.remove(k);continue;}
if(set.contains(t1)){set.remove(k);continue;}
set.add(t1);
if(set.contains(t2)){set.remove(k);set.remove(t1); continue;}
set.add(t2);
if(set.contains(t3)){set.remove(k);set.remove(t2);set.remove(t1);continue;}
set.add(t3);
total.removeAll(total);
for(int q=1;q<10;q++){
total.add(q);
}
total.removeAll(set);
int[]s=new int[3];
Iterator it=total.iterator();
int p=0;
while(it.hasNext()){
s[p]=Integer.parseInt(it.next()+"");
p++;
}
n=s[0]*100+s[1]*10+s[2];
if(n==2*(i*100+j*10+k)){
System.out.println(i+""+j+""+k+" "+n+" "+m3);
}
n=s[0]*100+s[2]*10+s[1];
if(n==2*(i*100+j*10+k)){
System.out.println(i+""+j+""+k+" "+n+" "+m3);
}
n=s[1]*100+s[0]*10+s[2];
if(n==2*(i*100+j*10+k)){
System.out.println(i+""+j+""+k+" "+n+" "+m3);
}
n=s[1]*100+s[2]*10+s[0];
if(n==2*(i*100+j*10+k)){
System.out.println(i+""+j+""+k+" "+n+" "+m3);
}
n=s[2]*100+s[0]*10+s[1];
if(n==2*(i*100+j*10+k)){
System.out.println(i+""+j+""+k+" "+n+" "+m3);
}
n=s[2]*100+s[1]*10+s[0];
if(n==2*(i*100+j*10+k)){
System.out.println(i+""+j+""+k+" "+n+" "+m3);
}
set.remove(t1);
set.remove(t2);
set.remove(t3);
set.remove(k);
}
set.remove(j);
}
set.remove(i);
}
}
}