放假以来第一次做题,啊,真的菜。
一共八道题,题目难度依次增加,前四个题很简单,争取都做一下(这是大佬的原话)然后开始做题,前两道题都很简单就不说了,第三题有点坑,自己逻辑出错了,再加上有个小知识点的遗忘,纪录一下吧。
对,没错就是这个题,折腾了很久,这就是实力弱鸡!
就我自己的理解,首先是把输入的值存为两个字符串a,b ,然后进行字符拼接,完成了第一步。
接着把拼接的字符串转化成int型,因为这里说了a,b的范围【1,100】所以不用考虑BigInteger。这里就遇到了第一个问题,就是类型转换(这里我想用string转int),但是我忘了怎么转换了。。。只能用百度了,顺便也复习了这个点。
接下来,我觉得这题很稳了,判断是不是平方数就好了。快速写完了之后试了几个例子就提交了,but!!!样例没有全过。
1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String[] args) { 5 Scanner sc=new Scanner(System.in); 6 String a=sc.next(); 7 String b=sc.next(); 8 String c=a+b; 9 int bool=0; 10 int sum=Integer.parseInt(c); 11 12 for(int i=1;i<=100;i++){ 13 if(sum%i==0&&sum==i*i){ 14 bool=1;
15 } 16 } 17 18 if(bool==1){ 19 System.out.println("Yes"); 20 } 21 if(bool==0){ 22 System.out.println("No"); 23 } 24 } 25 }
这是我第一次写的代码,嗯,应该已经很明显了。但是我就是没有意识到那里有错,不服输的我又改了一个版本,从1到100循环a,b,然后拼接,再判断是不是平方数,我让他输出了ab的拼接数和yes or no其实这里已经能看出错误了,因为最后的大部分显示的都是xxxxx yes。但是我看见100100也写得yes,样例里有这个,我过了这个样例是no所以觉得是我程序写错了!!!啊,大坑,然后一直再改程序验证到底是那里的样例过不了。
然后我翻本子看到之前写的判断素数,发现,我循环的判断条件是Math.sqrt(n)!!!忽然发现了,我的逻辑出了漏洞啊,我当时想的是因为ab最大取100,那么ab最大就是100*100,天!蠢的无话可说了吧。忘了是拼接,再加上样例里的100100让我更坚信了(by the way,我坚信的是错的啊,100*100=10000啊)所以我取值去到100根本不全啊,最后用了Math.sqrt(sum)就全过了。
最后,再次吐槽自己的菜,我当时看见了Math.sqrt(sum)做判断条件就随手一提交(还在if(sum%i==0&&sum==i*i)里面加了break;和 else条件,因为我当时并没有意识到自己的错误)这次就过来。我一开始还以为是break 和else的问题,全做完后,重新提交有break else 没有改100的版本才发现原来是这个错误。
好了,好了,最后的代码:
1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String[] args) { 5 Scanner sc=new Scanner(System.in); 6 String a=sc.next(); 7 String b=sc.next(); 8 String c=a+b; 9 int bool=0; 10 int sum=Integer.parseInt(c); 11 12 for(int i=1;i<=Math.sqrt(sum);i++){ 13 if(sum%i==0&&sum==i*i){ 14 bool=1; 15 break; 16 }else{ 17 bool=0; 18 } 19 } 20 21 if(bool==1){ 22 System.out.println("Yes"); 23 } 24 if(bool==0){ 25 System.out.println("No"); 26 } 27 } 28 }
很简单的题,以后注意啊~~~