• 2.2练习总结


      放假以来第一次做题,啊,真的菜。

      一共八道题,题目难度依次增加,前四个题很简单,争取都做一下(这是大佬的原话)然后开始做题,前两道题都很简单就不说了,第三题有点坑,自己逻辑出错了,再加上有个小知识点的遗忘,纪录一下吧。

           

           

      对,没错就是这个题,折腾了很久,这就是实力弱鸡!

    就我自己的理解,首先是把输入的值存为两个字符串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 }

    很简单的题,以后注意啊~~~

     

    不知道为什么一开始做这个题脑子抽抽了,觉得很明显是个递归题。然后写了下面的这段代码。样例1 2可以过,3就一直不出结果

     1 import java.util.Scanner;
     2 
     3 public class test4 {
     4     static int num=0;
     5     public static void main(String[] args) {
     6         Scanner sc=new Scanner(System.in);
     7         int a=sc.nextInt();//500
     8         int b=sc.nextInt();//100
     9         int c=sc.nextInt();//50
    10         int x=sc.nextInt();
    11         if(x%50==0){
    12             /** 
    13              * 递归求解其中 
    14              * @param x 总共的钱数
    15              */ 
    16             f(x,a,b,c);
    17             System.out.println(num);
    18         }else{
    19             System.out.println(0);
    20         }
    21         
    22     }
    23 
    24     static void f(int x, int a,int b,int c) {
    25         // TODO Auto-generated method stub
    26         if(a<0||b<0||c<0){
    27             return;
    28         }
    29         if(x<0){   //不符合分钱的总数,不和题意 
    30             return;  
    31         }
    32         if(x==0){   //当x=0时,刚好分完了所有的钱
    33             if(a+b+c>=1){
    34                 num++;    //方案数量加1 
    35                 return;
    36             }
    37               
    38         }  
    39         /** 
    40          * 当钱还没有分完时,继续走下去 
    41          * 每一次可以分50,100,500(q,w,e)
    42          */  
    43         f(x-50,a,b,c-1); 
    44         f(x-100,a,b-1,c); 
    45         f(x-500,a-1,b,c); 
    46         
    47     }
    48 
    49 }

    但是,到现在为止,我并不知道这个那里错了。我问了同学怎么做这个题,她和我说这个直接暴力搜索就行数据不是很大能过的。然后我写了下面这个:

     1 import java.util.Scanner;
     2 
     3 public class test5 {
     4 
     5     public static void main(String[] args) {
     6         // TODO Auto-generated method stub
     7         Scanner sc=new Scanner(System.in);
     8         int a=sc.nextInt();
     9         int b=sc.nextInt();
    10         int c=sc.nextInt();
    11         int x=sc.nextInt();
    12         int count=0;
    13         for(int i=0;i<=a;i++){
    14             for(int j=0;j<=b;j++){
    15                 for(int k=0;k<=c;k++){
    16                     if(i*500+j*100+k*50==x){
    17                         count++;
    18                     }
    19                 }
    20             }
    21         }
    22         System.out.println(count);
    23     }
    24 }

    这个很简单直接就过了。一开始上面那个代码,我其实是没找到错误在哪的,先挖个坑把,说不定过几天就会有讲题到时候再回来填坑GG。

  • 相关阅读:
    AndoridSQLite数据库开发基础教程(9)
    AndoridSQLite数据库开发基础教程(8)
    AndoridSQLite数据库开发基础教程(7)
    AndoridSQLite数据库开发基础教程(6)
    AndoridSQLite数据库开发基础教程(5)
    当music-list向上滑动的时候,设置layer层,随其滚动,覆盖图片,往下滚动时候,图片随着展现出来
    开发song-list组件;
    封装一个音乐列表music-list基础组件,可以共用,哪个需要的时候就是哪个props相应的值
    获取并封装歌手歌曲的数据
    使用vuex保存singer每个歌星的基本信息
  • 原文地址:https://www.cnblogs.com/ShallByeBye/p/8407068.html
Copyright © 2020-2023  润新知