zoukankan      html  css  js  c++  java
  • 蓝桥杯练习系统错题总结—(二)

      好了,开始写错题总结咯。因为我没有会员所以,题都是之前群里大佬总结出来的,没法测试数据,我看题写了之后对照大佬给的答案对比的思路,如果练习系统过不了可以告诉我一下,我们一起改进啊~虽然每篇文章都没什么阅读量哈哈哈。开始吧。

      第一题:字符串对比

       问题描述
         给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一:
         1:两个字符串长度不等。比如 Beijing 和 Hebei
         2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区分大小写),比如 Beijing 和 Beijing
         3:两个字符串长度相等,相应位置上的字符仅在不区分大小写的前提下才能达到完全一致(也就是说,它并不满足情况2)。比如 beijing 和 BEIjing
         4:两个字符串长度相等,但是即使是不区分大小写也不能使这两个字符串一致。比如 Beijing 和 Nanjing
         编程判断输入的两个字符串之间的关系属于这四类中的哪一类,给出所属的类的编号。
       输入格式
         包括两行,每行都是一个字符串
       输出格式
         仅有一个数字,表明这两个字符串的关系编号
       样例输入
       BEIjing
       beiJing
       样例输出
       3

    这道题一看就是简单的if else 判断即可,然后我第一遍的代码如下:

     1 import java.util.Scanner;
     2 
     3 public class 字符串对比 {
     4     public static void main(String[] args) {
     5         Scanner sc=new Scanner(System.in);
     6         String s1=sc.next();
     7         String s2=sc.next();
     8         if(s1.length()!=s2.length()){
     9             System.out.println("1");
    10         }
    11         else{
    12             if(s1.equals(s2)){
    13                 System.out.println("2");
    14             }else{
    15                     if(s1.toLowerCase()==s2.toLowerCase()){
    16                     System.out.println("3");
    17                 }else{
    18                     System.out.println("4");
    19                 }
    20             }                        
    21         }
    22     }
    23 
    24 }

    这里的问题就是   字符串的比较一定要用.equals比较!==不行。如果你用s1.toLowerCase()==s2.toLowerCase() 比较两个字符串尽管两个字符串一样也是不返回false的。

    所以用s1.toLowerCase().equals(s2.toLowerCase())才是你真正想表达的意思。但这样其实不够简洁,其实这里有个更好更直接的表达.equalsIgnoreCase。忽略大小写判断两

    个字符是不是相同。更改代码如下。

     1 import java.util.Scanner;
     2 
     3 public class 字符串对比 {
     4     public static void main(String[] args) {
     5         Scanner sc=new Scanner(System.in);
     6         String s1=sc.next();
     7         String s2=sc.next();
     8         if(s1.length()!=s2.length()){
     9             System.out.println("1");
    10         }
    11         else{
    12             if(s1.equals(s2)){
    13                 System.out.println("2");
    14             }else{
    15                 if(s1.equalsIgnoreCase(s2)){
    16                         System.out.println("3");
    17                 }else{
    18                     System.out.println("4");
    19                 }
    20             }                        
    21         }
    22     }
    23 
    24 }    

     第二题:矩阵面积交

    /*
      * 问题描述
       平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。
     对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
     输入格式
       输入仅包含两行,每行描述一个矩形。
       在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
     输出格式
       输出仅包含一个实数,为交的面积,保留到小数后两位。
     样例输入(x1,y1),(x2,y2):y1!=y2
     1 1 3 3
     2 2 4 4
     样例输出
     1.00
      * */

    我一开始做的时候只考虑了样例给的哪一种相交的情况,考虑的不充分,后来想找出第一个矩形最小、最大x,第二个矩形最小、最大x。然后比较大小 得出相交的两个点x坐标,然后得出距离(矩形长度)同理再求得矩形宽度。但是实际做起来真的好麻烦,需要比较的很多,写起来也容易出错。我去看了参考的答案。他是这样做的:

    1 z[0]=Math.max(Math.min(x[0], x[1]), Math.min(x[2], x[3]));//x1
    2 z[1]=Math.min(Math.max(x[0], x[1]), Math.max(x[2], x[3]));//x2
    3 z[2]=Math.max(Math.min(y[0], y[1]), Math.min(y[2], y[3]));//y1
    4 z[3]=Math.min(Math.max(y[0], y[1]), Math.max(y[2], y[3]));//y2

    可能是我比较小白,我一看这个方法写的真的是高级,我要用好多行才能写清楚还特别容易中间写出错,人家四行就把相交得的矩形表达出来了。下面是完整代码:

     1 import java.util.Arrays;
     2 import java.util.Scanner;
     3 
     4 public class 矩形面积交 {
     5     public static void main(String[] args) {
     6         Scanner sc=new Scanner(System.in);
     7         double [] x=new double[4];
     8         double [] y=new double[4];
     9         double [] z=new double[4];
    10         for(int i=0;i<4;i++){
    11             x[i]=sc.nextDouble();
    12             y[i]=sc.nextDouble();
    13         }
    14         z[0]=Math.max(Math.min(x[0], x[1]), Math.min(x[2], x[3]));//x1
    15         z[1]=Math.min(Math.max(x[0], x[1]), Math.max(x[2], x[3]));//x2
    16         z[2]=Math.max(Math.min(y[0], y[1]), Math.min(y[2], y[3]));//y1
    17         z[3]=Math.min(Math.max(y[0], y[1]), Math.max(y[2], y[3]));//y2
    18         if(z[0]<z[1]&&z[2]<z[3]){
    19             double s=(z[1]-z[0])*(z[3]-z[2]);
    20             System.out.printf("%.2f",s);
    21         }else{
    22             System.out.println("0.00");
    23         }
    24     }
    25 
    26 }

    第三题:分解质因数

    问题描述
       求出区间[a,b]中所有整数的质因数分解。
     输入格式
       输入两个整数a,b。
     输出格式
       每行输出一个数的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是从小到大的)(具体可看样例)
     样例输入
     3 10
     样例输出
     3=3
     4=2*2
     5=5
     6=2*3
     7=7
     8=2*2*2
     9=3*3
     10=2*5
     提示
       先筛出所有素数,然后再分解。
     数据规模和约定
       2<=a<=b<=10000

    import java.util.Scanner;
    
    public class 分解质因数 {
        public static int[] su=new int[1229+1];
        public static int p=0;
        public static int b;
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner in=new Scanner(System.in);
            int a=in.nextInt();
            b=in.nextInt();
            sushu();
            int j,tmp;
            for(int i=a;i<=b;i++){
                System.out.print(i+"=");
                tmp=i;
                for(j=0;j<p;j++){
                    if(tmp%su[j]==0){
                        System.out.print(su[j]);
                        tmp/=su[j];
                        if(tmp!=1)
                            System.out.print("*");
                        else
                            break;
                        j--;
                    }
                }
                System.out.println();
            }
            
        }
        public static void sushu(){
            int j;
            su[p]=2;
            p++;
            for(int i=3;i<=b;i=i+2){
                for(j=0;j<p;j++){
                    if(i%su[j]==0)break;
                }
                if(j==p){
                    su[p]=i;
                    p++;
                }
            }
            
        }
    
    }
  • 相关阅读:
    五子棋算法
    记录2个算法知识(常见面试题)
    python基础面试题之类型转换(字典篇)
    Python中的多线程和多进程的应用场景和优缺点。
    python基础面试题之输入年月日,判断这个日期是这一年的第几天。
    Python装饰器(面试题)
    linux终止进程
    nest_asyncio出现错误
    sanic 相关的插件
    linux如何配置nginx全局变量
  • 原文地址:https://www.cnblogs.com/ShallByeBye/p/8481660.html
Copyright © 2011-2022 走看看