java实现数字组合

题目:将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    [email protected]
 *
 */
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);
		}
	}

}


你可能感兴趣的:(数据结构和算法,の,JAVA实现)