当前位置:网站首页>一次函数 T1744 963字符写法
一次函数 T1744 963字符写法
2022-07-17 22:23:00 【EdwinAze】
题目
给定两个整点的坐标,求它们所在直线的函数解析式(一次函数)。
*三个样例放在一起显示, 只需要输出一行式子就行
input
3 6
2 4
3 5
2 7
3 -1
5 -2
output
y=2x
y=-2x+11
y=-1/2*x+1/2
思路
模拟题, 我的做法是用点斜式公式, 先求出斜率再带入一个点来求方程。
因为还需要显示分数且为最简。
需要考虑很多细节, 先从简单开始:
输入坐标 x1,y1,x2,y2
斜率 k 便是 (y2-y1)/(x2-x1)
显然会多次使用 y2-y1, x2-x1, 为了减少代码复杂度也为了方便debug
这里用 a = y2-y1, b = x2-x1
那么 k = a/b
根据点斜式 y = kx + m
也可得出 m = y1 - k*x1 (带入任意一点)
如果题目允许小数, 那到这里就结束了, 但要求使用分数且为最简:
会用分数表示的只有 k, b
故把k化为分数, 分母为 a = y2-y1, 分子为 b = x2-x1
然后是b, 分母为 b , 分子为 y1 * b - x1 * a
最简的话可以求出 分母b, 分子a的最大公约数, 然后分别除以最大公约数即可
数值处理好了, 接下来是如何表示正负号, 和缩写情况:
首先判断k, 当k==0时, 应输出 y=y1 或者 y=y2
k不为0时:
- 判断是否应该在k之前加-
- 判断k是否为1, 若为1则需省略1, 只输出 y=x
- 判断k是否为分数, 若不为分数, 则输出 y=kx, 否则输出 y=k*x(多个*)
- 若是分数则判断分母是否为1, 若为1则只输出分子
(接下来处理m)
- 判断m之前应加什么符号
- 判断m的分母是否为1, 若为1则只输出分子
判断符号可以直接根据之前算出的小数结果来判断
代码
#include <iostream>
#include <cmath>
using namespace std;
template <typename T>
T gcd(T a, T b) {
return b ? gcd(b, a % b) : a; }
//------- Coding Area ---------//
typedef long long LL;
void reduce(LL &a, LL &b) // 约分
{
LL g = gcd(a, b);
a /= g, b /= g;
}
int main()
{
int x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2 ;
LL b = x2 - x1, a = y2 - y1;
reduce(a, b);
double k = (double)a / (double)b; // y = kx + b, b = y1 - k*x1
double n = (double)y1 - k*(double)x1;
LL c = y1*b - x1*a, d = b; // 常数的分数表示
reduce(c,d);
cout << "y=";
if(k == 0) cout << y1;
else
{
if(k < 0) cout << "-";
if(a != 1 || b != 1) cout << abs(a); // 避免出现 y = 1x + 1
if(b != 1) cout << "/" << abs(b) << "*";
cout << "x";
if(n > 0) cout << "+" << abs(c);
else if( n < 0) cout << "-" << abs(c);
if(d != 1 && n != 0) cout << "/" << abs(d);
}
return 0;
}
边栏推荐
- An unforgettable day in 2022 summer camp
- Leetcode 1275. Trouver le vainqueur de "Jingzi"
- 运行时加载 Objective-C
- Labview32-bit and 64 bit compatibility
- C - Matrix Chain Multiplication(栈的应用)
- Several points to be analyzed in the domestic fpga/dsp/zynq scheme
- TDesign compositionapi refactoring path
- session管理
- MySQL installation
- Classification of interrupts
猜你喜欢

3438. Number system conversion

Leetcode 1275. 找出井字棋的获胜者

ZABBIX realizes the monitoring of redis

UCAS. Deep learning Final review knowledge points summary notes

Deployment principle

3U VPX cooling conduction high performance srio/ Ethernet data exchange board
![2021.07.13 [station B] collapsed like this](/img/af/d7d6ae059b4bc2d76c6ea0edb64c82.png)
2021.07.13 [station B] collapsed like this

数据填报、报表展示哪家强?亿信ABI给你答案

MySQL CPU usage is soaring. How to locate who is occupying it

Comparaison de deux types de machines virtuelles
随机推荐
Display module in pyGame
kube-proxy & Service & Endpoint
PCIe Cameralink signal generator (Cameralink image analog source)
Read the paper: temporary graph networks for deep learning on dynamic graphs
Module 1 job
Load Objective-C at runtime
定时任务,vim直接创建修改用户
Unity uses a map to control the transparency of the material's main map
FPGA(VGA协议实现)
Google Earth Engine——无人机影像进行分类处理
Knapsack problem
CSRF protection mechanism
2021.07.13【B站】是这样崩的
A - Play on Words
Cross domain and CORS
UVA - 12096 The SetStack Computer
Chang'an chain learning research - storage analysis wal mechanism
ObjectARX -- implementation of custom circle
TDesign CompositionAPI 重构之路
中断的分类