一次函数自动解析

代码功能

输入 ( 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) y1y2=k(x1x2)

k = y 1 − y 2 x 1 − x 2 k=\frac{y1-y2}{x1-x2} k=x1x2y1y2

b = y 1 − k x 1 b=y_1-kx_1 b=y1kx1

代码

有兴趣的话可以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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值