日期: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} $$ 有以下三種狀況
- 如果 $\Delta \neq 0$,方程式恰有一組解,其解為 $x = \frac{\Delta_x}{\Delta}, ~ y = \frac{\Delta_y}{\Delta}$
- 如果 $\Delta = 0$,但 $\Delta_x, \Delta_y$ 至少有一個不為 0,無解。
- 如果 $\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;
}
沒有留言:
張貼留言