题目描述
小H是《星球大战》的铁杆粉丝,对电影里的光剑更是无比喜爱。在梦中,小H穿越到了星战世界,他发现脚下有一个坐标系,身旁有两把光剑,但是他怎么都无法拿起这两把光剑。此时,小H脑海中浮现了两个公式,机智的他意识到了这两个公式是拿起光剑的诀窍:这两个公式是二元一次方程,形如y=kx+b,k和b为不同的常数。显然,它们就是描述两把光剑各自所在直线的方程。问题来了,这两条直线会不会相交呢?如果相交,请输出YES,并输出交点,否则输出NO。小H已经搞定,开始挥舞光剑了,你呢?
输入
多样例,每组样例包含两行:
第一行输入两个整数,分别代表第一把光剑对应的k值和b值,
第二行输入两个整数,分别代表第二把光剑对应的k值和b值。
上述4个值均为整数,且绝对值小于100。
输出
如果两直线相交,第一行输出“YES”(不含引号),并在第二行输出交点坐标(小数点后保留两位小数,具体格式参考下方样例),否则输出“NO”(不含引号)
样例输入 Copy
1 23 2 16 9 0 8 0
样例输出 Copy
YES 7.00 30.00 YES 0.00 0.00
提示
保证两条直线不重合。
尽量不要对浮点数进行比较,会出现误差。
来源/分类
#include<stdio.h>
void main()
{
int k,b,k0,b0;
double x,y;
while(scanf("%d",&k)!=EOF)
{
scanf("%d",&b);
scanf("%d%d",&k0,&b0);
if((k==k0)||((1.0*b/k==1.0*b0/k0)&&(b!=0&&b0!=0)))
printf("NO\n");
else
{
printf("YES\n");
x=1.0*(b0-b)/(k-k0);
y=k*x+b;
printf("%.2f %.2f\n",x,y);
}
}
}