蓝桥杯 平方十位数(java实现)

题目描述: 由0~9这10个数字不重复、不遗漏,可以组成很多10位数字。这其中也有很多恰好是平方数(是某个数的平方)。
比如:1026753849,就是其中最小的一个平方数。
请你找出其中最大的一个平方数是多少?

解决方案
1.定义judge函数判断当前平方数的各个位数是否互不重复
2.判断开方后的数据范围(30000-100000),利用数据范围逐个搜索,满足该数平方后的最大十位数
代码实现
package Test;

public class Test4 {

	static int[] res = new int[10];
	static long max = 0;
	public static void main(String[] args) {
		for(long i = 30000; i < 100000; i++) {
			if(judge(i*i) == true && i*i > max) {
				max = i*i;
			}
		}
		
	    for(int n = 9; n >= 0; n--) { 
	    	res[n] = (int)(max % 10);  //将max的各位数正序存放到res数组
	    	max /= 10;
	    }
	    for(int i: res) {
	    	System.out.print(i); //输出res数组
	    }
	}
	public static boolean judge(long num) {
		boolean[] visit = new boolean[10]; //记录当前数组元素是否被标记过
		while(num != 0) {
			int sc = (int)(num % 10);
			if(visit[sc] == true) return false; //当前元素被重复标记,返回false
			visit[sc] = true;
			num /= 10;
		}
		return true;
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值