第八届蓝桥杯决赛 平方十位数(枚举)
生活随笔
收集整理的這篇文章主要介紹了
第八届蓝桥杯决赛 平方十位数(枚举)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
標(biāo)題:平方十位數(shù)
由0~9這10個(gè)數(shù)字不重復(fù)、不遺漏,可以組成很多10位數(shù)字。
這其中也有很多恰好是平方數(shù)(是某個(gè)數(shù)的平方)。
比如:1026753849,就是其中最小的一個(gè)平方數(shù)。
請(qǐng)你找出其中最大的一個(gè)平方數(shù)是多少?
注意:你需要提交的是一個(gè)10位數(shù)字,不要填寫任何多余內(nèi)容。
答案:9814072356
分析
- 我們很容易會(huì)想到求出9-0這10個(gè)數(shù)字的全排列,然后最先找到的平方數(shù)就是答案這種做法。顯然這種方法是正確的,但是如果寫全排列的代碼不熟練或者不會(huì)處理精度問(wèn)題就很容易出錯(cuò)(沒錯(cuò)就是我 )。
- 我們可以嘗試另一種做法,從1026753849\sqrt{1026753849}1026753849?開始枚舉,求出的小于11億且包含0-9這個(gè)數(shù)字的平方數(shù),最后一個(gè)輸出的就是我們要求的結(jié)果。
代碼如下
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總結(jié)
以上是生活随笔為你收集整理的第八届蓝桥杯决赛 平方十位数(枚举)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java 二维数组的初始化
- 下一篇: 第八届蓝桥杯决赛 磁砖样式(枚举)