题目背景
做数学寒假作业的怨念……
题目描述
给定两个整点的坐标,求它们所在直线的函数解析式(一次函数)。
输入格式
输入共两行。
第一行有两个整数x1,y1。表示第一个整点的坐标为(x1,y1)
第二行有两个整数x2,y2。表示第二个整点的坐标为(x2,y2)
输出格式
输出共一行,即这个函数解析式。
输入输出样例
输入 #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
说明/提示
二乘X表示为2x
二分之一乘X表示为1/2*x
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cstdio>
#include<math.h>
#include<climits>
#include <map>
using namespace std;
int k,n,m;
int xa , ya;
int xb ,yb;
int a,b;
int main(){
ios_base::sync_with_stdio(0); // 让cin变快
cin.tie(0); // 让cin变快
cin >> xa >> ya ;
cin >> xb >> yb;
cout << "y=";
if((yb-ya)%(xb-xa) == 0 ) {
k = (yb-ya)/(xb-xa);
b = yb-k*xb;
if(b != 0) {
if(k != -1 && k != 1) {
cout << k << "x+"<<b;
}
if(k == 1) cout << "x+" << b;
if(k == -1) cout << "-x+" << b;
} else {
if(k != -1 && k != 1) {
cout << k << "x";
}
if(k == 1) cout << "x";
if(k == -1) cout << "-x";
}
} else {
k = (yb-ya)/(xb-xa) + (yb-ya)%(xb-xa);
if((yb*xa-ya*xb)/(xa-xb) != 0 || (yb*xa-ya*xb)%(xa-xb) != 0) {
if((yb*xa-ya*xb) < 0 && (xa-xb)<0) {
cout << (yb-ya) << "/" << (xb-xa) << "*x+" << (ya*xb-yb*xa) << "/" << (xb-xa);
}
if((yb*xa-ya*xb) < 0 && (xa-xb)>0) {
cout << (yb-ya) << "/" << (xb-xa) << "*x" << (yb*xa-ya*xb) << "/" << (xa-xb);
}
if((yb*xa-ya*xb) > 0 && (xa-xb)<0) {
cout << (yb-ya) << "/" << (xb-xa) << "*x" << (ya*xb-yb*xa) << "/" << (xb-xa);
}
if((yb*xa-ya*xb) > 0 && (xa-xb) > 0) {
cout << (yb-ya) << "/" << (xb-xa) << "*x+" << (yb*xa-ya*xb) << "/" << (xa-xb);
}
}
else {
cout << (yb-ya) << "/" << (xb-xa);
}
}
return 0;
}