_QWQ_
  • 板块学术版
  • 楼主sixseven
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/15 16:46
  • 上次更新2024/8/15 18:55:10
查看原帖
_QWQ_
1318424
sixseven楼主2024/8/15 16:46
一次函数的定义:在某一个变化过程中,设有两个变量x和y,如果满足这样的关系:y = kx + b(k为一次项系数且k≠0,b为任意常数),那么我们就说y是x的一次函数,其中x是自变量,y是因变量 (又称函数)。y的值会随着x的变化而变化。
其中通过两个点的坐标确定一个一次函数的解析式是数学中的一个重要概念。小新学习了如何通过两个点的坐标确定一个一次函数的解析式。
要通过两个点的坐标确定一个一次函数的解析式,我们可以按照以下步骤进行:
1. 确定两个点的坐标:首先,我们需要确定两个点的坐标。假设这两个点分别为P(x1, y1)和Q(x2, y2)。
2. 计算斜率:通过这两个点的坐标,我们可以计算出函数的斜率。一次函数的斜率可以通过公式:斜率 = (y2 - y1) / (x2 - x1) 来计算。
3. 确定截距:通过已知的两个点和计算出的斜率,我们可以使用任意一个点和斜率来确定一次函数的截距。截距可以通过公式:截距 = y - 斜率 * x 来计算,其中y为已知点的纵坐标,x为已知点的横坐标。
4. 构建解析式:通过已知的斜率和截距,我们可以构建一次函数的解析式。一次函数的解析式一般为:y = 斜率 x + 截距。
现给定两个整点的坐标,求它们所在直线的函数解析式(一次函数)。不考虑 y1 等于 y2 和 x1 等于 x1 的情况。
如果 k 和 b 是分数,那么输出 分子/分母 * x 的情况并且分数是最简解析式,整数就输出整数,并且不带 * 号。详细见样例。

【输入格式】
输入共两行。
第一行有两个整数x1,y1。表示第一个整点的坐标为(x1,y1)
第二行有两个整数x2,y2。表示第二个整点的坐标为(x2,y2)
【输出格式】
输出共一行,即这个函数解析式。
【样例 1 输入】
-2 0
0 4
【样例 1 输出】
y=2x+4

【样例 2 输入】
3 6
2 4
【样例 2 输出】
y=2x


【样例 3 输入】
3 -1
5 -2 

【样例 3 输出】
y=-1/2*x+1/2

【数据范围】

测试点	x1,y1,x2,y2	额外性质
1,2,3,4	-10000<=x1,y1,x2,y2<=10000	k,b均为整数
5,6,7,8,9,10	-10000<=x1,y1,x2,y2<=10000	无
11,12,13,14,15,16,17,18,19,20	-10^8<= x1,y1,x2,y2<=10^8	无

保证k不为0与无穷大与无穷小。
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define x1 qwq
#define y1 quq
int x1, x2, y1, y2, n, m, q, p;
int gcd(int a, int b){
    return b!=0 ? gcd(b,a%b):a;
}
signed main(){
//	freopen("linear.in", "r", stdin);
//	freopen("linear.out", "w", stdout);
	cin >> x1 >> y1 >> x2 >> y2;
	cout << "y=";
	n = abs(y2 - y1), m = abs(x2 - x1);
	q = gcd(n, m);
	if(q == m) {
		if(x1 < x2 && y1 > y2) cout << '-';
		if(n / m != 1) cout << n / m;
		cout << 'x';
		if(y1 - n / m * x1) { cout << '+' << y1 - n / m * x1; }
	}
	else {
		if(x1 < x2 && y1 > y2) {
			cout << '-';
//			cout << "awa";
		}
		cout << n / q << '/' << m / q << "*x";
		p = gcd(m / q, x1);
		if(x1 < x2 && y1 > y2) n = -(n / q * x1 / p);
		m = m / q / p;
		n = y1 * m - n;
//		cout << n << ' ' << m;
		q = gcd(n, m);
		if(q == m) {
			if(n > 0 && m < 0 || n < 0 && m > 0) cout << '-' << abs(n) / abs(m);
			else {if(n / m) { cout << '+' << n / m;  }}
		}
		else { 
			if(n / q > 0 && m / q < 0 || n / q < 0 && m / q > 0) cout << '-' << abs(n / q) << '/' << abs(m / q); 
			else cout << '+' << n / q << '/' << m / q; 
		}
	}
	return 0;
}

这段是 50 分

查看数据后发现有 b 的约分不正确,与很多 +- 号错误。请问该怎么调试

2024/8/15 16:46
加载中...