熱門文章

2025年7月7日 星期一

ZeroJudge 解題筆記:a410. 解方程

作者:王一哲
日期:2025年7月7日


ZeroJudge 題目連結:a410. 解方程

解題想法


這題用克拉瑪公式,假設二元一次方程式為 $$ \left\{\begin{matrix} a_1 x + b_1 y &= c_1 \\ a_2 x + b_2 y &= c_2 \end{matrix}\right. $$ 令 $$ \Delta = \begin{vmatrix} a_1 & b_1 \\ a_2 & b_2 \end{vmatrix} ~~~~~\Delta_x = \begin{vmatrix} c_1 & b_1 \\ c_2 & b_2 \end{vmatrix} ~~~~~\Delta_y = \begin{vmatrix} a_1 & c_1 \\ a_2 & c_2 \end{vmatrix} $$ 有以下三種狀況
  1. 如果 $\Delta \neq 0$,方程式恰有一組解,其解為 $x = \frac{\Delta_x}{\Delta}, ~ y = \frac{\Delta_y}{\Delta}$
  2. 如果 $\Delta = 0$,但 $\Delta_x, \Delta_y$ 至少有一個不為 0,無解。
  3. 如果 $\Delta = \Delta_x = \Delta_y = 0$,無限多組解。


Python 程式碼


使用時間約為 18 ms,記憶體約為 3.3 MB,通過測試。
a1, b1, c1, a2, b2, c2 = map(int, input().split())
delta = a1*b2 - a2*b1
deltax = c1*b2 - c2*b1
deltay = a1*c2 - a2*c1
if delta != 0:  # 恰有一組解
    print(f"x={deltax/delta:.2f}")
    print(f"y={deltay/delta:.2f}")
else:
    if deltax != 0 or deltay != 0: print("No answer")   # 無解
    elif deltax == 0 and deltay == 0: print("Too many") # 無窮多組解


C++ 程式碼


使用時間約為 2 ms,記憶體約為 88 kB,通過測試。
#include <cstdio>
using namespace std;

int main() {
    int a1, b1, c1, a2, b2, c2;
    scanf("%d %d %d %d %d %d", &a1, &b1, &c1, &a2, &b2, &c2);
    int delta = a1*b2 - a2*b1, deltax = c1*b2 - c2*b1, deltay = a1*c2 - a2*c1;
    if (delta != 0) {  // 恰有一組解
        printf("x=%.2f\n", 1.0*deltax/delta);
        printf("y=%.2f\n", 1.0*deltay/delta);
    } else {
        if (deltax != 0 || deltay != 0) puts("No answer");     // 無解
        else if (deltax == 0 && deltay == 0) puts("Too many"); // 無窮多組解
    }
    return 0;
}


沒有留言:

張貼留言