好了,开始写错题总结咯。因为我没有会员所以,题都是之前群里大佬总结出来的,没法测试数据,我看题写了之后对照大佬给的答案对比的思路,如果练习系统过不了可以告诉我一下,我们一起改进啊~虽然每篇文章都没什么阅读量哈哈哈。开始吧。
第一题:字符串对比
问题描述
给定两个仅由大写字母或小写字母组成的字符串(长度介于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 }
明天再来补 分解质因数什么的啦。昨天就想发这篇,结果出去吃饭到很晚就没发。明天回来填坑,我要去睡觉啦