关于用JAVA计算ACM出现的问题
Problem Description
输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。
Input
输入数据有多组,每组占一行,由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开。
Output
对于每组输入数据,输出一行,结果保留两位小数。
Sample Input
0 0 0 1
0 1 1 0
Sample Output
1.00
1.41
以上是题目,以下是我写的代码,在Eclise上运行可以,但题目提交上去就是错误的。
import java.text.DecimalFormat;
import java.util.Scanner;
public class ACM2001 {
public static void main(String[] args){
double x1,x2,y1,y2,Result,R1,R2;
Scanner scanner = new Scanner(System.in);
while(true){
x1=scanner.nextDouble();
x2=scanner.nextDouble();
y1=scanner.nextDouble();
y2=scanner.nextDouble();
R1=java.lang.StrictMath.pow(x1-x2, 2);
R2=java.lang.StrictMath.pow(y1-y2, 2);
Result=java.lang.StrictMath.sqrt((R1+R2));
DecimalFormat df=new DecimalFormat("#.00");
System.out.println(df.format(Result));
}
}
}
------解决方案--------------------一般ACM的题目应该用高级程序设计来实现
你的代码用的是两点减的距离公式,只要有输入,就继续执行,没输入我没试
而且呢确实是错误的,
我测试
1
0
2
0
2.24
按你的思路来看(1,0),(2,0)两点的坐标是这样的,距离应该1才对
学过矩阵的话试试矩阵的思路,矩阵在科学计算上用的多
------解决方案--------------------同意楼上的, ACM的程序不是给你的例子正确了就正确了,你的程序有两个错误
1 输入的顺序错了,题中的顺序是x1 y1 x2 y2,而你程序中的顺序是x1 x2 y1 y2
2 decimalFormat不对,应该是DecimalFormat df=new DecimalFormat("#0.00");
最后没搞清楚题中的意思,是要输入所有组的数据之后一下子给出结果还是输一组数据给一个结果,如果修改之后还是不对的话就试一下一起给出结果的情况吧