第八届蓝桥杯:平方十位数

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

思路:这道题其实并不难,但是一开始由于我把思路局限在对数字的排列组合上,在对99999以内的数字进行平方,然后进行判断是否相等,导致数据量很大,所以花了很长时间也没算出来。作为蓝桥杯的第一题,可以想到不需要过于复杂的算法,一般情况下暴力破解就很容易算出结果的。所以,我也参考了一些网络上的解题方法,经过微调找到了下面的代码。

从99999开始递减,将num的平方转为char数组,然后循环遍历数组,如果出现两位相同的,就排除掉。如此直到找到一个各个 位数都不相同的,就停止循环并且输出。

这道题吧,难度不是很大,符合第一题的难度系数。也提醒了我,换角度反向思考问题。

package dibajie;

public class one {
	public static void main(String[] args) {
		long num=99999;
		boolean flag=true;
		while(flag){
			long res=num*num;
			String s=res+" ";
			char[] arr=s.toCharArray();
			boolean bool=true;
			for(int i=0;i<arr.length;i++){
				for(int j=i+1;j<arr.length;j++){
					if(arr[i]==arr[j]){
						bool=false;
						break;
					}
				}
				if(!bool) break;
			}
			if(!bool){
				num--;
				continue;
			}else{
				flag=false;
				System.out.println(res);
			}
		}
		
	//9814072356	
		
		
	}
}

猜你喜欢

转载自blog.csdn.net/qq_37387363/article/details/80328593
今日推荐