代码功能
输入 ( x 1 , y 1 ) , ( x 2 , y 2 ) (x_1,y_1),(x_2,y_2) (x1,y1),(x2,y2) 为一次函数上的两个点,输出函数解析式。
推导过程
一次函数解析式是 y = k x + b y=kx+b y=kx+b。
会发现其实就是二元一次方程…
y 1 = k x 1 + b , y 2 = k x 2 + b y_1=kx_1+b,y_2=kx_2+b y1=kx1+b,y2=kx2+b
y 1 − y 2 = k ( x 1 − x 2 ) y_1-y_2=k(x_1-x_2) y1−y2=k(x1−x2)
k = y 1 − y 2 x 1 − x 2 k=\frac{y1-y2}{x1-x2} k=x1−x2y1−y2
b = y 1 − k x 1 b=y_1-kx_1 b=y1−kx1
代码
有兴趣的话可以Hack一下
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int a1, b1, a2, b2;
cin >> a1 >> b1 >> a2 >> b2;
cout << "f(x)=";
int a = a2 - a1, b = b2 - b1;
if (a < 0 && b > 0 || a > 0 && b < 0) cout << "-";
a = abs(a), b = abs(b);
int d = __gcd(a,b);
if (b != 0){
if (a <= b && d == a){
if (a == b) cout << "x";
else cout << b / a << "x";
}else cout << b / d << "/" << a / d << "x";
}
int f = (a2 - a1) * b1 - (b2 - b1) * a1;
f = abs(f);
int dd = __gcd(a,f);
if (f != 0){
if ( (a < 0 && f > 0) || (a > 0 && f < 0) ) cout << "-";
else if (b != 0) cout << "+";
if (dd == a) cout << f / dd;
else cout << f / dd << "/" << a / dd;
}
return 0;
}