题目背景
做数学寒假作业的怨念……
题目描述
给定两个整点的坐标,求它们所在直线的函数解析式(一次函数)。
输入格式
输入共两行。
第一行有两个整数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
解题思路
垃圾子在线学习一次函数
y = kx + b
k = (y2 - y1) / (x2 / x1)
b = y1 - x1 *k
所以这题真的好水,可是我真的不会函数qwq
还有输出真的好复杂,可能是我太菜了
Code
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
long long x1, y, x2, yy, kfz, kfm, bfz, bfm;
int main(){
scanf ("%lld%lld%lld%lld", &x1, &y, &x2, &yy);
if (x1 > x2)
{
swap (x1, x2);
swap (y, yy);
}
kfz = (yy - y), kfm = (x2 - x1);
bfz = y * kfm;
bfz -= x1 * kfz, bfm = kfm;
printf ("y=");
if (abs(kfz) % kfm)
printf ("%lld/%lld*x", kfz, kfm);
else
printf ("%lldx", kfz / kfm);
if (bfz != bfm && bfz)
{
if (abs(bfz) % bfm)
{
if (bfz> 0) printf ("+%lld/%lld", bfz, bfm);
else printf ("%lld/%lld", bfz , bfm);
}
else
{
if (bfz / bfm > 0) printf ("+%lld", bfz / bfm);
else printf ("%lld", bfz / bfm);
}
}
}