⚖️
一次方程:天平与两条线
等式就是一架天平:两边做同样的事,平衡不变——解方程就是「两边一起动手」,把 x 单独请到一边。
💡 打个比方
等式 3x + 5 = 14 就像一架天平:左盘放「3 个 x 加 5 克砝码」,右盘放 14 克砝码,两边一样重。要找出 x 有多重,就两边同时动手:两边各拿走 5 克 → 3x = 9(天平还是平的);再把两边平均分成 3 份、各留 1 份 → x = 3(还是平的!)。
两条铁律:① 两边加/减同一个数,平衡不变;② 两边乘/除以同一个非零数,平衡不变。解方程的全部动作就这两招。
如果方程里有两个未知数(比如 2x + 3y = 12),一个方程就像「一根绳捆两个气球」——解不唯一(有好多个 (x, y) 满足它)。想唯一确定 x 和 y,需要两个方程:两条直线,交在一个点上——那个交点就是方程组的解!
术语:一元一次方程(ax + b = c:只有一个未知数 x,最高 1 次,解 x = (c−b) ÷ a);二元一次方程(ax + by = c:两个未知数,一个方程解不唯一);二元一次方程组(两个方程联立,解 = 两条直线的交点 (x, y));消元法(把两个方程相加/相减,消掉一个未知数,变成一元一次);唯一解(两条直线不平行时恰好交于一点;ad − bc = 0 时没有唯一解)。
🖼️ 大图看明白
🧩 子任务 1:一元一次方程——把 x 请到一边
🎯 小目标:掌握 ax + b = c → x = (c − b) ÷ a 的两步动作(先消常数、再消系数),会解、会验根。
解 3x + 5 = 14,全程只靠天平铁律(两边做同样的事):
// 3x + 5 = 14
// 第 1 步:两边同时减 5(把常数项从 x 身边赶走)
3x + 5 − 5 = 14 − 5
3x = 9
// 第 2 步:两边同时除以 3(把 x 的系数变成 1)
3x ÷ 3 = 9 ÷ 3
x = 3
// 验根(把 x = 3 代回原方程左边):
3 × 3 + 5 = 9 + 5 = 14 = 右边 ✓ 解正确
// 一般形式:ax + b = c(a ≠ 0)
ax + b − b = c − b // 两边减 b
ax = c − b
x = (c − b) ÷ a // 两边除以 a
// 再来一个(常数是负数):2x − 7 = 3
2x − 7 + 7 = 3 + 7 // 两边加 7(消 −7 就加 7)
2x = 10
x = 5 // 验根:2×5 − 7 = 3 ✓
✅ 小检查:① 解 5x + 3 = 23。② 解 4x − 9 = 11。③ 为什么要求 a ≠ 0?(a = 0 时方程变成什么样?)
看看答案
① 5x = 23 − 3 = 20 → x = 4(验根 5×4+3 = 23 ✓)。② 4x = 11 + 9 = 20 → x = 5(验根 4×5−9 = 11 ✓)。③ a = 0 时方程变成 0·x + b = c 即 b = c:要么恒成立(解不唯一),要么矛盾(无解),都不再是「唯一解出 x」的一元一次方程了。
易错:解 3x + 5 = 14 时「只减左边」:3x = 9 写对,却忘了右边也要 − 5——天平两边必须同时动手,只做一边天平就歪了(3x + 5 − 5 ≠ 14)。
🧩 子任务 2:二元一次方程——一个方程解不唯一
🎯 小目标:明白「一个方程、两个未知数」解有无穷多个,会枚举 2x + 3y = 12 的非负整数解。
方程 2x + 3y = 12 里有 x 和 y 两个未知数,但只有一条约束。给定 x,y 就被定下来;x 可以取很多值 → 解有无穷多个(实数解)。竞赛里常问非负整数解,可以一个一个枚举:
// 枚举 2x + 3y = 12 的非负整数解(x, y ≥ 0 且为整数)
// 策略:让 y 从 0 开始往上试,看 2x = 12 − 3y 是不是非负偶数
y = 0: 2x = 12 → x = 6 → (6, 0) ✓
y = 1: 2x = 9 → x = 4.5 ✗(不是整数)
y = 2: 2x = 6 → x = 3 → (3, 2) ✓
y = 3: 2x = 3 → x = 1.5 ✗
y = 4: 2x = 0 → x = 0 → (0, 4) ✓
y = 5: 2x = −3 → x < 0 ✗(以后 y 更大,x 更负,不用再试)
// 非负整数解共 3 组:(6,0)、(3,2)、(0,4)
// 抽验:2×3 + 3×2 = 6 + 6 = 12 ✓
// 几何理解:2x + 3y = 12 是一条直线,非负整数解 =
// 这条直线上「格点」(横纵坐标都是非负整数)——只有 3 个。
// 一个方程 = 一条线,线上的点无穷多;整数格点有限。
✅ 小检查:① 3x + 2y = 12 有几组非负整数解?(按 y = 0,1,2,… 试)② 2x + 4y = 6 有非负整数解吗?③ 为什么枚举到 y = 5 就可以停(对 2x + 3y = 12)?
看看答案
① y = 0: x = 4 → (4,0);y = 1: 3x = 10 ✗;y = 2: 3x = 8 ✗;y = 3: 3x = 6 → x = 2 → (2,3);y = 4: 3x = 4 ✗;y = 5: 3x = 2 ✗;y = 6: 3x = 0 → x = 0 → (0,6)。共 3 组:(4,0)、(2,3)、(0,6)。② y = 0: 2x = 6 → x = 3 → (3,0);y = 1: 2x = 2 → x = 1 → (1,1);y = 2: 2x = −2 ✗。有,2 组:(3,0)、(1,1)。③ y 每 +1,右边 12 − 3y 就 −3,x 只会越来越小;y = 5 时 x 已经 < 0,再大 y,x 更负——所以可以停。
易错:看到「二元一次方程」就急着写唯一答案——一个方程管不住两个未知数,解是「一族」。题目没有限制时解有无穷多个;限制了「非负整数」才可数、才有限。
🧩 子任务 3:二元一次方程组——两条线的交点
🎯 小目标:会「加减消元」解 x + y = 5 与 x − y = 1,理解交点就是方程组的解,并学会验根。
现在有两个方程、两个未知数——两条直线。它们的交点同时满足两个方程,就是方程组的解。解法叫消元:让其中一个未知数「消失」,先解出另一个。
// 方程组:x + y = 5(①) 和 x − y = 1(②)
// 方法 A:两式相减,消掉 x
① − ②:(x + y) − (x − y) = 5 − 1
2y = 4
y = 2
// 把 y = 2 代回 ①:x + 2 = 5 → x = 3
解:x = 3, y = 2
// 方法 B:两式相加,消掉 y
① + ②:(x + y) + (x − y) = 5 + 1
2x = 6
x = 3
// 代回 ②:3 − y = 1 → y = 2 —— 同一个答案 ✓
// 验根(两个方程都要过):
①:3 + 2 = 5 ✓
②:3 − 2 = 1 ✓
// 口诀:一个方程管不住两个未知数,两个方程才有交点。
// 两条线相交 → 1 个交点 → 唯一解
// 两条线平行 → 没有交点 → 无解
// 两条线重合 → 处处交点 → 无穷多解
✅ 小检查:① 解方程组 2x + y = 8,x + 3y = 10。② 解 x + 2y = 5,x − 2y = 1。③ 方程组 x + y = 3 与 2x + 2y = 7 有唯一解吗?为什么?
看看答案
① ①×3 − ② 消 y:6x + 3y − (x + 3y) = 24 − 10 → 5x = 14 → x = 2.8;代回 ①:2×2.8 + y = 8 → y = 2.4。解:(2.8, 2.4)(验:2.8 + 3×2.4 = 2.8 + 7.2 = 10 ✓)。② 两式相加:2x = 6 → x = 3;两式相减:4y = 4 → y = 1。解:(3, 1)(验:3+2 = 5 ✓,3−2 = 1 ✓)。③ 第二式 = 第一式 × 2,但右边 7 ≠ 3 × 2 = 6——两条线平行不重合,无解(x+y=3 上的点代入第二式都得 6,永远到不了 7)。
易错:只解出一个未知数就宣布「做完了」——x = 3 求出后还必须代回求 y;最后两个方程都要验一遍,错一个就全错。
🧩 子任务 4:编程——用「行列式公式」一次算出交点
🎯 小目标:记住 det = a·d − b·c 和 x = (e·d − b·f)/det、y = (a·f − c·e)/det,能写出判断「唯一解 / 无唯一解」的程序框架。
方程组 ax + by = e,cx + dy = f。把上面的消元过程完整推一遍,会得到一个一步到位的公式(也叫克莱默法则):先算「判别式」 det = a·d − b·c。det ≠ 0 就有唯一解;det = 0 就是平行或重合,无唯一解。
// 推导(消元的「打包」版):
// ①×d − ②×b 消 y:ad·x − bc·x = e·d − b·f → (ad − bc)·x = ed − bf
// ②×a − ①×c 消 x:ad·y − bc·y = a·f − c·e → (ad − bc)·y = af − ce
// 两个方程的「左边」都冒出来同一个因子 det = ad − bc:
det = a·d − b·c
det ≠ 0:x = (e·d − b·f) ÷ det,y = (a·f − c·e) ÷ det
det = 0:两线平行或重合 → 无唯一解(无解或无穷解)
// 手推验证 1:x + y = 5, x − y = 1 → a=1,b=1,c=1,d=−1,e=5,f=1
det = 1×(−1) − 1×1 = −2 ≠ 0 → 有唯一解
x = (5×(−1) − 1×1) ÷ (−2) = (−6) ÷ (−2) = 3 ✓
y = (1×1 − 1×5) ÷ (−2) = (−4) ÷ (−2) = 2 ✓ (和子任务 3 一样!)
// 手推验证 2(解不是整数):2x + 3y = 12, 4x + y = 8
det = 2×1 − 3×4 = −10 ≠ 0
x = (12×1 − 3×8) ÷ (−10) = (−12) ÷ (−10) = 1.2
y = (2×8 − 4×12) ÷ (−10) = (−32) ÷ (−10) = 3.2
验:2×1.2 + 3×3.2 = 2.4 + 9.6 = 12 ✓
4×1.2 + 3.2 = 4.8 + 3.2 = 8 ✓
// 手推验证 3(det = 0):x + y = 3, 2x + 2y = 6
det = 1×2 − 1×2 = 0 → 第二式 = 第一式×2 → 两线重合
→ 无穷多解(线 x+y=3 上每个点都是解),程序统一说「无唯一解」
✅ 小检查:① 为什么 det = 0 时公式就「失效」了?(想想除法)② a=1, b=2, c=2, d=4, e=5, f=10 与 e=5, f=7 两种情况各属于哪种「无唯一解」?③ 用公式解 3x + 2y = 6, x + 2y = 4。
看看答案
① 公式里要除以 det;det = 0 就是除以 0——除以 0 在数学里没意义(就像天平两边都减 0 却想「变出」答案),所以公式失效。② det = 1×4 − 2×2 = 0;f = 10 时第二方程整条 = 第一方程 × 2(右边 10 = 5 × 2 也成立)→ 重合,无穷多解;f = 7 时右边 7 ≠ 5 × 2 → 平行,无解。③ det = 3×2 − 2×1 = 4;x = (6×2 − 2×4) ÷ 4 = 4 ÷ 4 = 1;y = (3×4 − 1×6) ÷ 4 = 6 ÷ 4 = 1.5(验:3×1+2×1.5 = 6 ✓,1+2×1.5 = 4 ✓)。
易错:把 det 的符号算错——det = a·d − b·c 是「交叉相乘再相减」,写成 a·b − c·d 或 a·d + b·c 都会得到完全不同的答案。手推一遍验证 1 就能发现自己写错了。
💻 完整代码:克莱默公式解二元一次方程组
// 输入:a b c d e f(六个整数,方程组 ax+by=e, cx+dy=f)
// 输出:唯一解(整数就输出整数,小数就输出小数)或「无唯一解」
// 示例:1 1 1 -1 5 1 → x=3 y=2
// 2 3 4 1 12 8 → x=1.2 y=3.2(非整数)
// 1 1 2 2 3 6 → 无唯一解(两线平行或重合)
#include <iostream>
using namespace std;
int main() {
int a, b, c, d, e, f;
cin >> a >> b >> c >> d >> e >> f;
int det = a * d - b * c; // 判别式:交叉相乘再相减
if (det == 0) {
// 两线平行(无解)或重合(无穷解)——都不是「唯一解」
cout << "无唯一解(两线平行或重合)" << endl;
} else {
double x = (double)(e * d - b * f) / det; // 消元打包公式
double y = (double)(a * f - c * e) / det;
if ((int)x == x && (int)y == y)
cout << "x=" << (int)x << " y=" << (int)y << endl;
else
cout << "x=" << x << " y=" << y << "(非整数)" << endl;
}
return 0;
}
// 动手验证:输入 1 1 1 -1 5 1 → x=3 y=2(和手推一致 ✓)
// 输入 1 1 2 2 3 7 → 无唯一解(det=0,平行)
// 输入 3 2 1 2 6 4 → det=4,x=1 y=1.5(非整数)
✋ 你来试试
第 1 题:解方程组 x + y = 9,x − y = 3。
两式相加消 y:2x = 12 → x = 6;代回 ①:6 + y = 9 → y = 3。解:(6, 3)(验:6−3 = 3 ✓)。克莱默公式:det = 1×(−1)−1×1 = −2,x = (9×(−1)−1×3)/(−2) = 12/2 = 6 ✓,y = (1×3−1×9)/(−2) = 3 ✓。
第 2 题:用克莱默公式解 2x + y = 8,x + 3y = 10。
a=2,b=1,c=1,d=3,e=8,f=10:det = 2×3 − 1×1 = 5;x = (8×3 − 1×10) ÷ 5 = 14 ÷ 5 = 2.8;y = (2×10 − 1×8) ÷ 5 = 12 ÷ 5 = 2.4(验:2×2.8 + 2.4 = 8 ✓,2.8 + 3×2.4 = 10 ✓)。非整数解,程序会输出「(非整数)」。
第 3 题:3x + 2y = 6 有几组非负整数解?
按 y 枚举:y=0 → 3x=6 → x=2 → (2,0) ✓;y=1 → 3x=4 ✗;y=2 → 3x=2 ✗;y=3 → 3x=0 → x=0 → (0,3) ✓;y≥4 时 3x < 0 停。共 2 组:(2,0)、(0,3)。
第 4 题(加餐):det = 0 时「无唯一解」分两种,分别举例。
方程 x + 2y = 5:取 1 2 2 4 5 10 → 第二方程整条 = 第一方程 × 2 → 两线重合,无穷多解;取 1 2 2 4 5 7 → 右边 7 ≠ 10 → 两线平行,无解。程序对两种情况都输出「无唯一解」——要区分它们得再检查右边是否「同比」。
🎯 一句话记住:一元一次方程 = 天平两步,x = (c − b) ÷ a;二元一次方程组 = 两条线的交点,x = (ed − bf)/(ad − bc)、y = (af − ce)/(ad − bc),ad − bc = 0 就「无唯一解」。