16递归:猜算术

【题目】 
看下面的算式: 
□□ x □□ = □□ x □□□ 
它表示:两个两位数相乘等于一个两位数乘以一个三位数。 
如果没有限定条件,这样的例子很多。 
但目前的限定是:这9个方块,表示1~9的9个数字,不包含0。 
该算式中1至9的每个数字出现且只出现一次! 
比如: 
46 x 79 = 23 x 158 
54 x 69 = 27 x 138 
54 x 93 = 27 x 186 
….. 
请编程,输出所有可能的情况! 
注意: 
左边的两个乘数交换算同一方案,不要重复输出! 
不同方案的输出顺序不重要

import java.math.BigInteger;
import java.util.*;

public class Lanq {
    //public static double pi = 3.1415926535897932;

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        solve();
    }

    public static void solve() {
        Set s = new TreeSet();
        int a = 0, b = 0, c = 0, d = 0;
        boolean[] bool = new boolean[1000];
        bool[a] = false;
        bool[b] = false;
        bool[c] = false;
        bool[d] = false;
        bool [a+b]=false;
        for (a = 10; a <= 99; a++)
            for (b = 10; b <= 99; b++)
                for (c = 10; c <= 99; c++)
                    for (d = 100; d <= 999; d++) {
                        if (a * b == c * d) {
                            int[] p = new int[9];
                            p[0] = a / 10;
                            p[1] = a % 10;
                            p[2] = b / 10;
                            p[3] = b % 10;
                            p[4] = c / 10;
                            p[5] = c % 10;
                            p[6] = d / 100;
                            p[7] = d / 10 % 10;
                            p[8] = d % 10;
                            Arrays.sort(p);
                            int cnt = 0;
                            for (int i = 0; i < 8; i++) {
                                if (p[i] + 1 == p[i + 1])
                                    cnt++;
                            }


                            if (cnt == 8 && p[0] == 1 && p[8] == 9) {
                                 if(s.contains(a)&&s.contains(b)&&s.contains(a+b))
                                     continue;
                                 else
                                    System.out.println(a + "*" + b + "=" + c + "*" + d);
                                    //System.out.println(b + "*" + a + "=" + c + "*" + d);
                                   s.add(a);s.add(b);s.add(a+b);


                            }


                        }
                    }
    }
}

  

posted @ 2018-03-12 20:09  xianbeigg  阅读(143)  评论(0编辑  收藏  举报