题解 P2026 【求一次函数解析式】

高中方式轻松解决这个模拟题。

首先我们了解斜率的简单求法:

\[k= {y2-y1 \over x2-x1}{=}{\Delta y \over \Delta x}\]
然后我们了解到让我们求解一次函数解析式(斜截式),就是说\(k\)值一定存在!
所以这个题我们可以用点斜式解决。

点斜式又是什么?

\[y-y1=k(x-x1)\]

条件:基于k值和点\((x1,y1)\)

好,这样就能求。
我们再推导一下,把点斜式化成斜截式:
\[\because y-y1=k\cdot x-k\cdot x1\]
\[\therefore y=k\cdot x+(y1-k\cdot x1)\]
\[\therefore b=y1-k\cdot x1 \]

不多说,k和b都有可能是分数。

但是我们有黑科技gcd啊!这里安利递推gcd。

inline int gcd(int a,int b)
{
    while (b!=0){int c=b;b=a%b;a=c;}
    return a;
}

因为输入的数据都是整数,所以我们不用担心b通分的毒瘤问题。
\[\because k={\Delta y\over \Delta x}\space\space\space\space\therefore b={y1\cdot \Delta x-\Delta y\cdot x1\over \Delta x}\]
好!接下来大家都知道该怎么做了吧!
Code:

//(Mode:C++)
//Author is Jelly_Goat.
//No cheat because it's very easy to understand.
#include <bits/stdc++.h>
#define ori ={1,1}//初始化,懒得打函数
using namespace std;

struct fenshu{
    int fenzi,fenmu;
    fenshu a(void);
}k ori,b ori;
inline int gcd(int a,int b)
{
    while (b!=0){int c=b;b=a%b;a=c;}
    return a;
}
void work(int x1,int y1,int x2,int y2)
{
    k.fenzi=y2-y1,k.fenmu=x2-x1;//k=Δy/Δx
    int temp=gcd(k.fenzi,k.fenmu);
    k.fenzi/=temp,k.fenmu/=temp;//化简k
    //推导b:(y-y1)=k(x-x1) -> y=kx+(y1-k*x1) -> b=y1-k*x1
    b.fenzi=k.fenmu*y1-k.fenzi*x1,b.fenmu=k.fenmu;
    temp=gcd(b.fenzi,b.fenmu);
    b.fenzi/=temp,b.fenmu/=temp;//化简b
    printf("y=%d",&k.fenzi);
    if (k.fenmu!=1){printf("/%d",&k.fenmu);}
    printf("*x");
    if (b.fenzi!=0)
    {
        printf("+%d",&b.fenzi);
        if (b.fenmu!=1){printf("/%d",&b.fenmu);}
    }
}
int main()
{
    int x1,x2,y1,y2;
    scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
    work(x1,y1,x2,y2);
    return 0;
}

然鹅一样的防作弊系统。(都懂)

Thanks for your reading! End here.

转载于:https://www.cnblogs.com/jelly123/p/10392034.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值