洛谷 P2026 求一次函数解析式

题目背景

做数学寒假作业的怨念……

题目描述

给定两个整点的坐标,求它们所在直线的函数解析式(一次函数)。

输入输出格式

输入格式:

 

输入共两行。

第一行有两个整数x1,y1。表示第一个整点的坐标为(x1,y1)

第二行有两个整数x2,y2。表示第二个整点的坐标为(x2,y2)

 

输出格式:

 

输出共一行,即这个函数解析式。

 

输入输出样例

输入样例#1: 复制
【一】
3 6
2 4
【二】
3 5
2 7
【三】
3 -1
5 -2
输出样例#1: 复制
【一】
y=2x
【二】
y=-2x+11
【三】
y=-1/2*x+1/2

说明

二乘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));
        }
    }
}
细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
原文地址:https://www.cnblogs.com/cangT-Tlan/p/7855871.html