蓝桥杯中一些题本身比较难,我们可以换种思路,能拿多少拿多少,比如这道题,拿个一半的分数也不错
题目
问题描述
一个整数 aa 是一个完全平方数, 是指它是某一个整数的平方, 即存在一个 整数 bb, 使得 a=b^2a=b2 。
给定一个正整数 nn, 请找到最小的正整数 xx, 使得它们的乘积是一个完全平 方数。
输入格式
输入一行包含一个正整数 nn 。
输出格式
输出找到的最小的正整数 xx 。
样例输入 1
12
样例输出 1
3
样例输入 2
15
样例输出 2
15
运行限制
最大运行时间:1s
最大运行内存: 256M
思路
看了一圈大佬的答案实在看不懂,有点神奇,但比赛不会做我们也可以用暴力累加,多少拿点分
我的笨鸟思路:
完全平方数开根一定是一个整数,所以,我们可以把它当做字符串来思考,判断开根后的数的小数点后的位数,如果<=1(因为比如100,用Math.sqrt(100)=10.0)返回的结果小数点后只有1位,而Math.sqrt(3)这种数开根后就是一长串了,所以只要字符串中小数点后只有一位,那肯定就是答案
因为Math.sqrt()的结果是一个浮点数,所以我们可以用将其转为String,然后用split()方法,参数是一个正则表达式,也简单,就是"\\.",因为小数点‘.’是特殊字符,所以需要转义字符,split("\\.")的意思就是以“.”做分隔的标志,把小数点前后分隔开来返回一个String数组,我们只需要判断小数点后面的那个字符串就好
代码
import java.util.*; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); long n = input.nextLong(); System.out.println(minP(n)); } public static long minP(long num){ double n = Math.round(Math.sqrt(num));//3 long i=2; if (Math.sqrt(num) == n){ return 1; }else {//能被整除说明找到最小 while(!ifZhengChu(Math.sqrt(num*i)+"")){ i++; } } return i; } //判断是不是整数 public static boolean ifZhengChu(String str){ String[] strings = str.split("\\."); String check = strings[1]; if (check.length()<=1){ return true; }else { return false; } } }