2017 国赛c/c++ B组填空题集合
平方十位数
由0~9这10个数字不重复、不遗漏,可以组成很多10位数字。
这其中也有很多恰好是平方数(是某个数的平方)。
比如:1026753849,就是其中最小的一个平方数。
请你找出其中最大的一个平方数是多少?
注意:你需要提交的是一个10位数字,不要填写任何多余内容。
答案:9814072356(17分)
分析:
可以深搜
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;
public class Main{static Scanner sc = new Scanner(new BufferedInputStream(System.in));static PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));static boolean[] bok = new boolean[12];static int []dig = new int[12];static long res=0;static void dfs(int now){if(now==11){long ans=0;for(int i=1;i<=10;i++)ans = ans*10+dig[i];if((long)Math.sqrt(ans)*(long)Math.sqrt(ans)==ans){res = Math.max(ans, res);}return;}for(int i=0;i<10;i++){if(!bok[i]){bok[i] = true;dig[now] = i;dfs(now+1);bok[i] = false; }}}public static void main(String[] args){dfs(1);out.println(res);out.flush();}
}
也可以枚举 从9876543210~1023456789
也可以判断出最小的平方数的大小 然后开跟不断++ 在平方 判断是否符合条件
或者从用最高的平方数开跟上界-- 枚举平方数开跟的范围 会更小
然后可以用set判断是否是十个数