一次函数

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

输入格式
第一行两个整数 x1,y1,表示第一个点的坐标;
第一行两个整数 x2,y2,表示第一个点的坐标;
 -100<=x1,y1,x2,y2<=100,x1!=x2;



输出格式
输出一次函数解析式,具体格式看样例,分数必须是最简形式。

输出时每行末尾的多余空格,不影响答案正确性

样例输入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



//注意当k=1时:y=x而非y=1x
k=(y2-y1)/(x2-x1);
b=(x2y1-y2x1)/(x2-x1);
//我呢就是按正常思路先讨论k,在不同k的情况下讨论b;很麻烦!!
什么都不说了,附上代码


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;


int main()
{
    int x1,x2,y1,y2,k3,b3,z;
    cin>>x1>>y1>>x2>>y2;
    int k,b,k1,k2,b1,b2;
    k1=(y2-y1),k2=(x2-x1);
    b1=((x2*y1)-(x1*y2)),b2=(x2-x1);
    if(x1!=x2&&x1>=-100&&x1<=100&&x2>=-100&&x2<=100&&y1>=-100&&y1<=100&&y2>=-100&&y2<=100)
    {

        if(k1==0)
            printf("y=%d",y1);
        else
        {
            if(k1%k2==0)
            {
                k3=k1/k2;
                b3=b1/b2;

                 if(k3==1)
                 {

                if(b3>0)
                    printf("y=x+%d",b3);
                else if(b3==0)
                    printf("y=x");
                else if(b3<0)
                    printf("y=x%d",b3);
                 }

                  if(k3==-1)
                 {

                if(b3>0)
                    printf("y=-x+%d",b3);
                else if(b3==0)
                    printf("y=-x");
                else if(b3<0)
                    printf("y=-x%d",b3);
                 }

                 if(k3!=1&&k3!=-1)
                 {

                if(b3>0)
                    printf("y=%dx+%d",k3,b3);
                else if(b3==0)
                    printf("y=%dx",k3);
                else if(b3<0)
                    printf("y=%dx%d",k3,b3);
                 }


            }
            else
            {
                int i,z1,z2;
                if(k1>0)
                    z1=k1;
                if(k1<0)
                    z1=-k1;
                if(k2>0)
                    z2=k2;
                if(k2<0)
                    z2=-k2;
                z=z1<z2?z1:z2;
                for(i=2; i<z;)
                {
                    if(z1%i==0&&z2%i==0)
                    {
                        z1/=i,z2/=i;
                        z=z1<z2?z1:z2;
                        i=2;
                    }

                    else
                        i++;
                }
                if(k1<0)
                    k1=-z1;
                else
                    k1=z1;
                if(k2<0)
                    k2=-z2;
                else
                    k2=z2;

                if(k1<0||k2<0)
                {
                    if(k1<0&&k2<0)
                    {
                        k1=k1*(-1),k2=k2*(-1);
                        printf("y=%d/%d",k1,k2);
                    }

                    else if(k2<0&&k1>0)
                    {
                        k1=k1*(-1),k2=k2*(-1);
                        printf("y=%d/%d",k1,k2);
                    }
                   else if(k1<0&&k2>0)
                        printf("y=%d/%d",k1,k2);

                }
                else
                    printf("y=%d/%d",k1,k2);
                printf("*x");
                if(b1%b2==0)
                {
                    b3=b1/b2;
                    if(b3>0)
                        printf("+%d",b3);
                    if(b3<0)
                        printf("%d",b3);
                }
                else
                {
                if(b1>0)
                    z1=b1;
                if(b1<0)
                    z1=-b1;
                if(b2>0)
                    z2=b2;
                if(b2<0)
                    z2=-b2;
                z=z1<z2?z1:z2;
                for(i=2; i<z;)
                {
                    if(z1%i==0&&z2%i==0)
                    {
                        z1/=i,z2/=i;
                        z=z1<z2?z1:z2;
                        i=2;
                    }

                    else
                        i++;
                }
                if(b1<0)
                    b1=-z1;
                else
                    b1=z1;
                if(b2<0)
                    b2=-z2;
                else
                    b2=z2;
                    if(b1<0||b2<0)
                    {
                        if(b1<0&&b2<0)
                        {
                            b1=b1*(-1),b2=b2*(-1);
                            cout<<"+"<<b1<<"/"<<b2;
                        }
                        else if(b2<0&&b1>0)

                        {
                            b2=b2*(-1),   b1=b1*(-1);
                            cout<<b1<<"/"<<b2;
                        }
                        else if(b1<0&&b2>0)
                            cout<<b1<<"/"<<b2;
                    }
                    else
                        cout<<"+"<<b1<<"/"<<b2;
                }
            }
        }

    }
    return 0;
}

小伙伴们可以自己尝试一下,如果有好的思路期待你的分享。。。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值