第三届蓝桥杯Java高职组决赛第一题

题目描述:

    看这个算式:
    ☆☆☆ + ☆☆☆ = ☆☆☆
    如果每个五角星代表 1 ~ 9 的不同的数字。
    这个算式有多少种可能的正确填写方法?
    173 + 286 = 459
    295 + 173 = 468
    173 + 295 = 468
    183 + 492 = 675
    以上都是正确的填写法!
    注意:
    111 + 222 = 333 是错误的填写法!
    因为每个数字必须是不同的! 
    也就是说:1~9中的所有数字,每个必须出现且仅出现一次!
    注意:
    不包括数字“0”!
    注意:
    满足加法交换率的式子算两种不同的答案。
    所以答案肯定是个偶数!
    
分析:先生成1-9组成的不同的9位数,然后三个三个的相加,如果a+b=c就输出结果。
主要用递归,出口是1-9个不同的数生成完毕。
import java.util.ArrayList;
import java.util.List;

public class test_1 {
	public static List<String> num = new ArrayList<String>();
	public static int count =0;
	public void randomNum(int mark){
		if(mark == 9){
			String[] result = (String[])num.toArray(new String[10]);
			String a = "";
			String b = "";
			String c = "";
			for(int i=0;i<3;i++)
				a+=result[i];
			for(int i=3;i<6;i++)
				b+=result[i];
			for(int i=6;i<9;i++)
				c+=result[i];
			if(Integer.parseInt(a)+Integer.parseInt(b)==Integer.parseInt(c))
				//System.out.println(a+" + "+b+" = "+c);
				count++;
			return ;
		}else{
			for(int i=1;i<=9;i++){
				if(!num.contains(""+i)){
					num.add(""+i);
					randomNum(++mark);
				}else{
					continue;
				}
				mark--;
				num.remove(mark);
			}
		}
		
	}
	
	public static void main(String args[]){
		new test_1().randomNum(0);
		System.out.println(count);
	}
}


posted @ 2013-07-02 20:44  坚固66  阅读(248)  评论(0编辑  收藏  举报