一次函数 计蒜客 - T1744

题目链接

大概就这样分情况讨论

代码

#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
//数学公式kz=ya-yb ,km=xa-xb ,k=k1/k2 bz=xayb-xbya bm=xa-xb b=bz/bm;
int xa,ya,xb,yb;
double k,b;
int kz,km,bz,bm,kyf,byf;

int Rof(int m,int n)//找最大公约数用来约分的函数  约分:reduction of a fraction
{
	while(m!=n)
	{
		if(m>n)
            m=m-n;
		else
			n=n-m;
	}
	return m;
}

int main()
{
    cin>>xa>>ya>>xb>>yb;
    kz=ya-yb;
    km=xa-xb;
    k=kz*1.0/km;
    bz=xa*yb-xb*ya;
    bm=xa-xb;
    b=bz*1.0/bm;
    int kzz=abs(kz),kmm=abs(km),bzz=abs(bz),bmm=abs(bm);
    if(k==0)
    {
        cout<<"y="<<ya;
        return 0;
    }
    else
    {
        if(b==0)
        {
            if(kz%km==0)
            {
                if(k==1)
                    cout<<"y=x";
                else if(k==-1)
                    cout<<"y=-x";
                else
                    cout<<"y="<<k<<"x";
            }
            else
            {
                kyf=Rof(kzz,kmm);
                kzz=kz/kyf;
                kmm=km/kyf;
                if(k>0)
                    kzz=kzz;
                else
                    kzz=-kzz;
                    cout<<"y="<<kzz<<"/"<<kmm;
            }
        }
        else
        {
            if(kz%km==0)
            {
                if(b>0)
                {
                    if(k==1)
                        cout<<"y=x+"<<b;
                    else if(k==-1)
                        cout<<"y=-x+"<<b;
                    else
                        cout<<"y="<<k<<"x+"<<b;
                }
                else
                {
                    if(k==1)
                        cout<<"y=x"<<b;
                    if(k==-1)
                        cout<<"y=-x"<<b;
                    else
                        cout<<"y="<<k<<"x"<<b;
                }
            }
            else
            {
                kyf=Rof(kzz,kmm);
                kzz=kzz/kyf;
                kmm=kmm/kyf;
                if(k>0)
                    kzz=kzz;
                else
                    kzz=-kzz;
                if(bz%bm==0)
                {
                    if(b>0)
                        cout<<"y="<<kzz<<"/"<<kmm<<"*x+"<<b;
                    else
                        cout<<"y="<<kzz<<"/"<<kmm<<"*x"<<b;
                }
                else
                {
                    byf=Rof(bzz,bmm);
                    bzz=bzz/byf;
                    bmm=bmm/byf;
                    if(b>0)
                        cout<<"y="<<kzz<<"/"<<kmm<<"*x+"<<bzz<<"/"<<bmm;
                    else
                        cout<<"y="<<kzz<<"/"<<kmm<<"*x-"<<bzz<<"/"<<bmm;
                }
            }
        }
    }
    return 0;
}

发布了81 篇原创文章 · 获赞 3 · 访问量 2759

猜你喜欢

转载自blog.csdn.net/weixin_44641254/article/details/104288027