给定两个整点的坐标,求它们所在直线的函数解析式(一次函数)。
输入格式
第一行两个整数 x1,y1,表示第一个点的坐标;
第一行两个整数 x2,y2,表示第一个点的坐标;
-100<=x1,y1,x2,y2<=100,x1!=x2;
输出格式
输出一次函数解析式,具体格式看样例,分数必须是最简形式。
输出时每行末尾的多余空格,不影响答案正确性
样例输入1
3 6
2 4
样例输出1
y=2x
样例输入2
3 5
2 7
样例输出2
y=-2x+11
样例输入3
3 -1
5 -2
样例输出3
y=-1/2*x+1/2
//注意当k=1时:y=x而非y=1x
k=(y2-y1)/(x2-x1);
b=(x2y1-y2x1)/(x2-x1);
//我呢就是按正常思路先讨论k,在不同k的情况下讨论b;很麻烦!!
什么都不说了,附上代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int x1,x2,y1,y2,k3,b3,z;
cin>>x1>>y1>>x2>>y2;
int k,b,k1,k2,b1,b2;
k1=(y2-y1),k2=(x2-x1);
b1=((x2*y1)-(x1*y2)),b2=(x2-x1);
if(x1!=x2&&x1>=-100&&x1<=100&&x2>=-100&&x2<=100&&y1>=-100&&y1<=100&&y2>=-100&&y2<=100)
{
if(k1==0)
printf("y=%d",y1);
else
{
if(k1%k2==0)
{
k3=k1/k2;
b3=b1/b2;
if(k3==1)
{
if(b3>0)
printf("y=x+%d",b3);
else if(b3==0)
printf("y=x");
else if(b3<0)
printf("y=x%d",b3);
}
if(k3==-1)
{
if(b3>0)
printf("y=-x+%d",b3);
else if(b3==0)
printf("y=-x");
else if(b3<0)
printf("y=-x%d",b3);
}
if(k3!=1&&k3!=-1)
{
if(b3>0)
printf("y=%dx+%d",k3,b3);
else if(b3==0)
printf("y=%dx",k3);
else if(b3<0)
printf("y=%dx%d",k3,b3);
}
}
else
{
int i,z1,z2;
if(k1>0)
z1=k1;
if(k1<0)
z1=-k1;
if(k2>0)
z2=k2;
if(k2<0)
z2=-k2;
z=z1<z2?z1:z2;
for(i=2; i<z;)
{
if(z1%i==0&&z2%i==0)
{
z1/=i,z2/=i;
z=z1<z2?z1:z2;
i=2;
}
else
i++;
}
if(k1<0)
k1=-z1;
else
k1=z1;
if(k2<0)
k2=-z2;
else
k2=z2;
if(k1<0||k2<0)
{
if(k1<0&&k2<0)
{
k1=k1*(-1),k2=k2*(-1);
printf("y=%d/%d",k1,k2);
}
else if(k2<0&&k1>0)
{
k1=k1*(-1),k2=k2*(-1);
printf("y=%d/%d",k1,k2);
}
else if(k1<0&&k2>0)
printf("y=%d/%d",k1,k2);
}
else
printf("y=%d/%d",k1,k2);
printf("*x");
if(b1%b2==0)
{
b3=b1/b2;
if(b3>0)
printf("+%d",b3);
if(b3<0)
printf("%d",b3);
}
else
{
if(b1>0)
z1=b1;
if(b1<0)
z1=-b1;
if(b2>0)
z2=b2;
if(b2<0)
z2=-b2;
z=z1<z2?z1:z2;
for(i=2; i<z;)
{
if(z1%i==0&&z2%i==0)
{
z1/=i,z2/=i;
z=z1<z2?z1:z2;
i=2;
}
else
i++;
}
if(b1<0)
b1=-z1;
else
b1=z1;
if(b2<0)
b2=-z2;
else
b2=z2;
if(b1<0||b2<0)
{
if(b1<0&&b2<0)
{
b1=b1*(-1),b2=b2*(-1);
cout<<"+"<<b1<<"/"<<b2;
}
else if(b2<0&&b1>0)
{
b2=b2*(-1), b1=b1*(-1);
cout<<b1<<"/"<<b2;
}
else if(b1<0&&b2>0)
cout<<b1<<"/"<<b2;
}
else
cout<<"+"<<b1<<"/"<<b2;
}
}
}
}
return 0;
}
小伙伴们可以自己尝试一下,如果有好的思路期待你的分享。。。。