首先!:
向量OA=(ax-x,ay),向量OB=(bx-x,by),面积为|(ax-x)by-(bx-x)ay|/2=|guding-kx|/2; 由于题目要求面积为2,我们反向求x,x有两种答案,随意输出一种即可。
考虑特殊情况,由于是浮点数,有误差,我们一定要选择范围,当k几乎接近0时,如果guding几乎接近4,即面积基本符合要求,我们随便输出一个x都行,这里输出8888888888888888888888888.0,否则无答案。
输出记得保留小数,干脆就用printf,我这里使用cout<<fixed<<setprecision(10).
#include<bits/stdc++.h>
using namespace std;
const double eps=1e-9;
int main() {
double ax, ay, bx, by;
cin>>ax>>ay;
cin>>bx>>by;
double guding=ax*by-bx*ay;
double k=ay-by;
if (fabs(k)<eps) {
if (fabs(fabs(guding)-4.0)<eps) {
cout<<fixed<<setprecision(10)<<8888888888888888888888888.0;
} else {
cout<<"no answer";
}
return 0;
}
double x1=(4.0-guding)/k;
double x2=(-4.0-guding)/k;
printf("%10.10f",x1);
// cout<<fixed<<setprecision(10)<<x1;
return 0;
}

京公网安备 11010502036488号