我又来求助了 80分

P5735 【深基7.例1】距离函数

isJason @ 2022-07-15 11:16:43

为什么每次都是80分

#include<bits/stdc++.h>
using namespace std;
double calc(double a, double b, double c, double d){
    return sqrt(abs((c-a)*(c-a))+abs((d-b)*(d-b)));  
}
int main(){
    int x1, y1, x2, y2, x3, y3;
    double length=0.0;
    cin>>x1>>y1;
    cin>>x2>>y2;
    cin>>x3>>y3;
    length+=calc(x1,y1,x2,y2);
    length+=calc(x1,y1,x3,y3);
    length+=calc(x2,y2,x3,y3);
    cout<<fixed<<setprecision(2)<<length;
    return 0;
}

加了abs也不行


by isJason @ 2022-07-15 11:17:14

5#没通过


by coldy_rainy @ 2022-07-15 11:24:19

@isJason

AC代码:

#include<bits/stdc++.h>
using namespace std;
double calc(double a, double b, double c, double d){
    return sqrt(abs((c-a)*(c-a))+abs((d-b)*(d-b)));
}
int main(){
    double/*更改*/ x1, y1, x2, y2, x3, y3;
    double length=0.0;
    cin>>x1>>y1;
    cin>>x2>>y2;
    cin>>x3>>y3;
    length+=calc(x1,y1,x2,y2);
    length+=calc(x1,y1,x3,y3);
    length+=calc(x2,y2,x3,y3);
    cout<<fixed<<setprecision(2)<<length;
    return 0;
}

by coldy_rainy @ 2022-07-15 11:28:04

@isJason

错误原因

题目描述: 坐标值是实数

实数,就意味着坐标值有可能是小数,有小数就用double

因此将x1,x2,x3,y1,y2,y3的类型从int改为double就可以AC了。

5样例:

输入:
23.234/*小数*/ 12.123/*小数*/
-99.99/*小数*/ 99.99/*小数*/
-1 -100
输出:
489.20

by isJason @ 2022-07-15 12:24:29

哦我脑子又短路了


by 2022fsjh @ 2022-08-05 09:10:31

...


by Payton123 @ 2023-01-07 20:00:19

看了这个楼之后感觉我代码好奇怪啊,我之前用我的代码

#include<iostream>
#include<cmath>
#include<iomanip>
double distance(double x1,double y1,double x2,double y2){
    return sqrt(pow(abss(x1-x2),2)+pow(abs(y1-y2),2));
}
int main(){
    double x1,x2,x3,y1,y2,y3,sum;
    std::cin>>x1>>y1;
    std::cin>>x2>>y2;
    std::cin>>x3>>y3;
    sum=distance(x1,y1,x2,y2)+distance(x1,y1,x3,y3)+distance(x3,y3,x2,y2);
    std::cout<<std::fixed<<std::setprecision(2)<<sum;
    return 0;
}

第五个WA,之后修改的方式是把abs改为fabs,楼主的abs修改过后也能AC,有点懵


by Payton123 @ 2023-01-07 20:15:13

头文件一换和楼主的答案就一样了,是因为我使用cmath调用的是C语言中的abs函数


|