基础算法题

1.排它平方数

    小明正看着 203879 这个数字发呆。

    原来,203879 * 203879 = 41566646641

    这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。

    具有这样特点的6位数还有一个,请你找出它!

    再归纳一下筛选要求:
    1. 6位正整数
    2. 每个数位上的数字不同
    3. 其平方数的每个数位不含原数字的任何组成数位

答案是一个6位的正整数。

请通过浏览器提交答案。
注意:只提交另一6位数,题中已经给出的这个不要提交。
注意:不要书写其它的内容(比如:说明性的文字)。

 1 package nothing;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 /**
 7  * 排它平方数
 8     小明正看着 203879 这个数字发呆。
 9     原来,203879 * 203879 = 41566646641
10     这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是不同的,并且它平方后的所有数位上都不出现组成它自身的数字。
11     具有这样特点的6位数还有一个,请你找出它!
12     再归纳一下筛选要求:
13     1. 6位正整数
14     2. 每个数位上的数字不同
15     3. 其平方数的每个数位不含原数字的任何组成数位
16     答案是一个6位的正整数。
17     请通过浏览器提交答案。
18     注意:只提交另一6位数,题中已经给出的这个不要提交。
19     注意:不要书写其它的内容(比如:说明性的文字)。
20  * @author hasee
21  *
22  */
23 public class ExcludeNumber  {
24     
25     static boolean bit[] = new boolean[10];
26     static List<Integer> list = new ArrayList<Integer>();
27     public static void main(String[] args) {
28         excludeNumber(0);
29         
30     }
31     //深度遍历,剪枝的回溯
32     public static void excludeNumber(int n){
33         if(n == 6){
34             long number=0; //注意溢出,不但平方后为long,此number也必须为long(不然运算时需要强制转换)
35             for (int i = 0; i < 6; i++) {
36                 number += list.get(5-i)*(Math.pow(10, i));  //注意^是异或!!!,而次方是Math.pow!!!
37             }
38             long square = number*number;
39             char[] squStr = String.valueOf(square).toCharArray();
40             char[] numStr = String.valueOf(number).toCharArray();
41             for (char c0 : squStr) {
42                 for (char c1 : numStr) if(c0 == c1) return;
43             }
44             System.out.println(number+"xxxx"+square);
45             return;
46         }
47         int first= n==0 ? 1 : 0;
48         for (int i = first; i < 10; i++) if(bit[i] == false){
49             list.add(i);
50             bit[i] = true;
51             excludeNumber(n+1);
52             list.remove((Integer)i);
53             bit[i] = false;
54         }
55     }
56 }
View Code

题来自:http://blog.csdn.net/u012027907/article/details/14157077

原文地址:https://www.cnblogs.com/jslee/p/3497883.html