蓝桥杯决赛第一题

平方十位数由0~9这10个数字不重复、不遗漏,可以组成很多10位数字。这其中也有很多恰好是平方数(是某个数的平方)。比如:1026753849,就是其中最小的一个平方数。请你找出其中最大的一个平方数是多少?注意:你需要提交的是一个10位数字,不要填写任何多余内容。

 1 import java.util.ArrayList;
 2 import java.util.List;
 3 
 4 /**
 5  * @author 宗远
 6  *
 7  * 2017年5月30日
 8  */
 9 public class Test__58 {
10     static List<Long> list = new ArrayList<Long>();
11     public static void main(String[] args) {
12         int arr[] = new int[10];
13         for(int i=0; i<arr.length; i++){
14             arr[i]=i;
15         }
16         long result = 0;
17         dfs(arr,0);
18         for(long a:list){
19             if(result < a)
20             result = a;
21         }
22         System.out.println(result);
23     }
24 
25     /**
26      * @param arr
27      * @param i
28      */
29     private static void dfs(int[] arr, int num) {
30         // TODO Auto-generated method stub
31         String str ="";
32         if(num==10){
33             for(int i=0; i<arr.length; i++){
34                 str = str + arr[i];
35             }
36             long count = Long.valueOf(str);
37             if(check(count)){
38                 list.add(count);
39             }
40         }
41         
42         for(int i=num; i<arr.length; i++){
43             {int temp = arr[i]; arr[i]=arr[num]; arr[num]=temp;}
44             dfs(arr,num+1);
45             {int temp = arr[i]; arr[i]=arr[num]; arr[num]=temp;}
46         }
47     }
48 
49     /**
50      * @param count
51      * @return
52      */
53     private static boolean check(long count) {
54         long num = (long)Math.sqrt(count);
55         if(num*num==count){
56             return true;
57         }
58         return false;
59     }
60 
61 }

这是比赛中最简单的题目,我却一直做不对,直接导致了在比赛中心态的崩盘,其中long型的运算始终是long型,数值超过Integer的极限,我没有合理的变通,也可能是自己赛前没有多练习的缘故,希望以后再困顿的时候,我依然能够沉着冷静,发挥自己的真实水准

原文地址:https://www.cnblogs.com/czy960731/p/6920944.html