分数 10
作者 蔡轲
单位 南昌航空大学
输入连个点的坐标,计算两点之间的距离
输入格式:
4个double类型的实数,两个点的x,y坐标,依次是x1、y1、x2、y2,两个点的坐标之间以空格分隔,每个点的x,y坐标以英文“,”分隔。例如:0,0 1,1或0.1,-0.3 +3.5,15.6。
若输入格式非法,输出"Wrong Format"。
若输入格式合法但坐标点的数量超过两个,输出“wrong number of points”。
输出格式:
计算所得的两点之间的距离。例如:1.4142135623730951
输入样例:
整数输入。例如:
0,0 1,1
输出样例:
在这里给出相应的输出。例如:
1.4142135623730951
输入样例1:
带符号double类型实数输入。例如:
+2,-2.3 0.9,-3.2
输出样例1:
在这里给出相应的输出。例如:
1.42126704035519
输入样例2:
格式非法。例如:
++2,-2.3 0.9,-3.2
输出样例2:
在这里给出相应的输出。例如:
Wrong Format
输入样例3:
点的数量超过两个。例如:
+2,-2.3 0.9,-3.2 +2,-2.3
输出样例3:
在这里给出相应的输出。例如:
wrong number of points
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
我滴源码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String input = in.nextLine();
String point[] = input.split(" ");
String num[] = null;
int cot = 0;
for(String i:point) {
num = i.split(",");
for(String j:num) {
//正则表达式
if(!j.matches("^[+-]?(0|(0\\.\\d+)?|[1-9][0-9]*(\\.\\d+)?)$")) {
System.out.print("Wrong Format");
System.exit(0);
}
}
}
if(point.length!=2) {
System.out.print("wrong number of points");
System.exit(0);
}
//把输入的转成数字
num = point[0].split(",");
double a = Double.valueOf(num[0]);
double b = Double.valueOf(num[1]);
num = point[1].split(",");
double c = Double.valueOf(num[0]);
double d = Double.valueOf(num[1]);
if(a==c&&b==d){
System.out.print("Wrong Format");
return;
}
System.out.print(Math.sqrt((a-c)*(a-c)+(b-d)*(b-d)));
in.close();
}
}
总结:
这道题是蔡轲大坑的入门题,这道题最好的是采用类设计来做。
这里点可以设计成一个类。
然后就是判断是否正确的这个正则表达式,可以说是十分坑爹了。
给几个测试样例没有给,但测试点里有的坑爹例子吧。
下面均该输出结果wrong format
+2,-2.3 0.0,-3.2
+2,-2.3 0.,-3.2
焯!