第八届蓝桥杯决赛 平方十位数(枚举)
生活随笔
收集整理的這篇文章主要介紹了
第八届蓝桥杯决赛 平方十位数(枚举)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
標題:平方十位數
由0~9這10個數字不重復、不遺漏,可以組成很多10位數字。
這其中也有很多恰好是平方數(是某個數的平方)。
比如:1026753849,就是其中最小的一個平方數。
請你找出其中最大的一個平方數是多少?
注意:你需要提交的是一個10位數字,不要填寫任何多余內容。
答案:9814072356
分析
- 我們很容易會想到求出9-0這10個數字的全排列,然后最先找到的平方數就是答案這種做法。顯然這種方法是正確的,但是如果寫全排列的代碼不熟練或者不會處理精度問題就很容易出錯(沒錯就是我 )。
- 我們可以嘗試另一種做法,從1026753849\sqrt{1026753849}1026753849?開始枚舉,求出的小于11億且包含0-9這個數字的平方數,最后一個輸出的就是我們要求的結果。
代碼如下
import java.util.Arrays;public class Main {static boolean mark[]=new boolean[15];static boolean check(long n) {//if n includes 0 to 9Arrays.fill(mark, false);while(n!=0) {if(mark[(int)(n%10)]) return false;else mark[(int)(n%10)]=true;n/=10;}return true;}public static void main(String[] args) { // System.out.println(Math.sqrt(1026753849));long sum=0;for(long i=32043;sum<=9999999999L;i++) {sum=i*i;if(check(sum))System.out.println(sum);}} } //the last output data is the answer總結
以上是生活随笔為你收集整理的第八届蓝桥杯决赛 平方十位数(枚举)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 二维数组的初始化
- 下一篇: 第八届蓝桥杯决赛 磁砖样式(枚举)