题目背景 做数学寒假作业的怨念……
题目描述 给定两个整点的坐标,求它们所在直线的函数解析式(一次函数)。
输入格式 输入共两行。
第一行有两个整数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
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #include<cstdio> #include<math.h> #include<climits> #include <map> using namespace std; int k,n,m; int xa , ya; int xb ,yb; int a,b; int main(){ ios_base::sync_with_stdio(0); // 让cin变快 cin.tie(0); // 让cin变快 cin >> xa >> ya ; cin >> xb >> yb; cout << "y="; if((yb-ya)%(xb-xa) == 0 ) { k = (yb-ya)/(xb-xa); b = yb-k*xb; if(b != 0) { if(k != -1 && k != 1) { cout << k << "x+"<<b; } if(k == 1) cout << "x+" << b; if(k == -1) cout << "-x+" << b; } else { if(k != -1 && k != 1) { cout << k << "x"; } if(k == 1) cout << "x"; if(k == -1) cout << "-x"; } } else { k = (yb-ya)/(xb-xa) + (yb-ya)%(xb-xa); if((yb*xa-ya*xb)/(xa-xb) != 0 || (yb*xa-ya*xb)%(xa-xb) != 0) { if((yb*xa-ya*xb) < 0 && (xa-xb)<0) { cout << (yb-ya) << "/" << (xb-xa) << "*x+" << (ya*xb-yb*xa) << "/" << (xb-xa); } if((yb*xa-ya*xb) < 0 && (xa-xb)>0) { cout << (yb-ya) << "/" << (xb-xa) << "*x" << (yb*xa-ya*xb) << "/" << (xa-xb); } if((yb*xa-ya*xb) > 0 && (xa-xb)<0) { cout << (yb-ya) << "/" << (xb-xa) << "*x" << (ya*xb-yb*xa) << "/" << (xb-xa); } if((yb*xa-ya*xb) > 0 && (xa-xb) > 0) { cout << (yb-ya) << "/" << (xb-xa) << "*x+" << (yb*xa-ya*xb) << "/" << (xa-xb); } } else { cout << (yb-ya) << "/" << (xb-xa); } } return 0; }