#53429: C++AC 就是一直代入求解


youtengyu (yuyuuu)

學校 : 元智大學
編號 : 295551
來源 : [116.241.217.46]
最後登入時間 :
2025-10-08 02:47:10

根據拋物線公式 y = a(x-h)^2 + k ,移項得到 a = (y-k)/(x-h)^2,頂點代入->h = x1,k = y1,代入過點 x = x2, y = y2 ,得到 a = (y2-y1)/(x2-x1)^2。

__gcd(a,b) 找最大公因數

 

#include <iostream>
#include <algorithm> //__gcd
 
using namespace std;
 
int main()
{
    int x1, y1, x2, y2;
    while (cin >> x1 >> y1 >> x2 >> y2) {
    int dx = x2 - x1;
    int dy = y2 - y1;  //分子
    int fenmu = dx * dx;  //分母
 
    int g = __gcd(dy, fenmu); //分子&分母的最大公因數
    int b = dy / g;  //分子約分
    int a = fenmu / g; //分母約分
    int c = -2 * b * x1; 
    int d = b * x1 * x1 + y1 * a;
 
    int G = __gcd(__gcd(a, abs(b)),__gcd(abs(c), abs(d)));
    a /= G; b /= G; c /= G; d /= G;
    cout << a << "y = " << b << "x^2 + " << c << "x + " << d << "\n";
    }
}
 
y = a(x-h)^2 + k展開->y = ax^2 - (2ah)x + (ah^2+k)-> a(分母)為dy/fenmu = b/a ->y = (b/a)x^2 - (2 b/a *  h)x+(b/a  * h^2 + k) -> 同乘a ->
ay = (b)x^2 - (2 * b * x1)x + (b * x1 * x1 + y1 * a)。