蓝桥杯决赛第一题
平方十位数由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的极限,我没有合理的变通,也可能是自己赛前没有多练习的缘故,希望以后再困顿的时候,我依然能够沉着冷静,发挥自己的真实水准