题目背景
做数学寒假作业的怨念……
题目描述
给定两个整点的坐标,求它们所在直线的函数解析式(一次函数)。
输入输出格式
输入格式:
输入共两行。
第一行有两个整数x1,y1。表示第一个整点的坐标为(x1,y1)
第二行有两个整数x2,y2。表示第二个整点的坐标为(x2,y2)
输出格式:
输出共一行,即这个函数解析式。
输入输出样例
说明
二乘X表示为2x
二分之一乘X表示为1/2*x
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int x1,x2,y1,y2; int fz,fm; int gcd(int x,int y){ return x==0?y:gcd(y%x,x); } int main(){ scanf("%d%d%d%d",&x1,&y1,&x2,&y2); fz=y1-y2; fm=x1-x2; int GCD=gcd(fz,fm); fz/=GCD;fm/=GCD; printf("y="); if(fm==1&&fz!=0) printf("%dx",fz); else if(fm!=0&&fz!=0){ if(fz*fm<0) printf("-%d/%d*x",abs(fz),abs(fm)); else if(fz*fm>0) printf("%d/%d*x",abs(fz),abs(fm)); } if(fm==1){ if(y1-fz*x1>0) printf("+%d",y1-fz*x1); else if(y1-fz*x1<0) printf("-%d",y1-fz*x1); } else{ int fmm=abs(fm),fzz=fmm*y1; if(fz*fm<0){ fzz+=fz*x1;GCD=gcd(fzz,fmm); fzz/=GCD;fmm/=GCD; if(fzz!=0) if(fzz*fmm<0) printf("-%d/%d",abs(fzz),abs(fmm)); else if(fzz*fmm>0) printf("+%d/%d",abs(fzz),abs(fmm)); } else{ fzz-=fz*x1;GCD=gcd(fzz,fmm); fzz/=GCD;fmm/=GCD; if(fzz!=0) if(fzz*fmm<0) printf("-%d/%d",abs(fzz),abs(fmm)); else if(fzz*fmm>0) printf("+%d/%d",abs(fzz),abs(fmm)); } } }