(5) 代数与平面几何

(5) 代数与平面几何

GESP C++ 八级考试大纲知识点梳理系列文章:

  1. 计数原理:加法与乘法
  2. 排列与组合
  3. 杨辉三角与组合数
  4. 倍增法
  5. 代数与平面几何 {: .prompt-tip}

继上一篇我们探讨了倍增法之后,我们继续深入 GESP C++ 八级大纲。今天我们来聊聊编程中必不可少的数学基础——代数与平面几何

(5)掌握代数与平面几何基础知识(初中数学部分)。包括方程的概念及一元一次方程、二元一次方程的基本求解技巧,求基础平面几何概念、求基本图形(如长方形、三角形、圆形等)的面积等 {: .prompt-info}

虽然 GESP 是编程考试,但数学是算法的基石。在八级考试中,代数和几何通常不会像数学卷子那样考证明题,而是考查利用计算机计算公式的能力以及将几何/代数问题转化为代码逻辑的能力

本人也是边学、边实验、边总结,且对考纲深度和广度的把握属于个人理解。因此本文更多的不是一个教程,而是个人知识梳理,如有遗漏、疏忽,欢迎指正、交流。 {: .prompt-warning}

一、代数基础:方程与求解

在计算机科学中,解方程通常是“模拟”或者“公式化”的过程。

1.1 方程的概念

方程是含有未知数的等式。 在 C++ 中,我们并不是像手算一样去“移项、合并同类项”,而是需要推导出一个通用的计算公式,然后让计算机套用公式算出结果。

1.2 一元一次方程 (Linear Equation in One Variable)

标准形式ax+b=0ax + b = 0 (其中 xx 是未知数,a0a \neq 0)

数学求解: 移项得 ax=bax = -b,系数化为 1 得 x=bax = -\frac{b}{a}

编程实现思路: 如果题目给出 aabb,我们只需要一行代码:

double x = -b / a;

注意:在编程中要特别注意 a=0a=0 的情况(除数为 0 异常)。如果 a=0a=0b=0b=0,有无数解;如果 a=0a=0b0b \neq 0,无解。

1.3 二元一次方程组 (Linear Equations in Two Variables)

标准形式

{a1x+b1y=c1a2x+b2y=c2 \begin{cases} a_1x + b_1y = c_1 \\ a_2x + b_2y = c_2 \end{cases}

求解技巧

在数学课上我们学过“代入消元法”和“加减消元法”。在编程中,为了通用性,我们通常使用公式法(基于克莱姆法则 Cramer’s Rule)或者高斯消元法(对于更多元方程)。对于二元一次方程组,公式法最直接。

我们通过加减消元可以推导出 xxyy 的通解公式:

令分母 D=a1b2a2b1D = a_1b_2 - a_2b_1。 如果 D0D \neq 0,则有唯一解:

x=c1b2c2b1a1b2a2b1 x = \frac{c_1b_2 - c_2b_1}{a_1b_2 - a_2b_1} y=a1c2a2c1a1b2a2b1 y = \frac{a_1c_2 - a_2c_1}{a_1b_2 - a_2b_1}

代码示例

#include <iostream>
#include <iomanip> // 用于保留小数
using namespace std;

int main() {
    // 求解方程组:
    // 2x + 3y = 8
    // 3x - y = 1
    double a1 = 2, b1 = 3, c1 = 8;
    double a2 = 3, b2 = -1, c2 = 1;

    double D = a1 * b2 - a2 * b1;

    if (D == 0) {
        cout << "无唯一解" << endl;
    } else {
        double x = (c1 * b2 - c2 * b1) / D;
        double y = (a1 * c2 - a2 * c1) / D;
        cout << "x = " << x << ", y = " << y << endl;
    }
    return 0;
}

输出x = 1, y = 2


二、平面几何基础:图形与面积

几何问题在编程中非常常见,主要涉及坐标计算和面积/周长公式。

2.1 常见面积公式

图形面积公式 (SS)周长公式 (CC)备注
长方形a×ba \times b2(a+b)2(a + b)a,ba, b 为长和宽
正方形a2a^24a4aaa 为边长
圆形πr2\pi r^22πr2 \pi rrr 为半径,π\pi 常用 acos(-1.0)
三角形12××\frac{1}{2} \times \text{底} \times \text{高}a+b+ca+b+c基础公式

2.2 勾股定理与距离公式 (Pythagorean Theorem)

勾股定理:直角三角形两条直角边 a,ba, b 的平方和等于斜边 cc 的平方,即 a2+b2=c2a^2 + b^2 = c^2

坐标系两点间距离: 已知两点 A(x1,y1)A(x_1, y_1)B(x2,y2)B(x_2, y_2),根据勾股定理,距离 dd 为:

d=(x1x2)2+(y1y2)2 d = \sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2}

这是计算几何中最基础的公式,几乎每道几何题都会用到。

2.3 三角形的存在性原理

判断三条线段 a,b,ca, b, c 能否组成三角形:

  • 任意两边之和大于第三边a+b>ca+b>ca+c>ba+c>bb+c>ab+c>a
  • 任意两边之差小于第三边ab<c|a-b|<c

编程判断时,通常写全三个条件。

2.4 海伦公式 (Heron’s Formula) —— 三角形面积神器

在编程题中,经常会给出三角形三个顶点的坐标,求面积。或者直接给出三边长 a,b,ca, b, c。 此时,求“高”比较麻烦,海伦公式是解决此类问题的首选。

步骤

  1. 先计算半周长 ppp=a+b+c2 p = \frac{a + b + c}{2}
  2. 再计算面积 SSS=p(pa)(pb)(pc) S = \sqrt{p(p-a)(p-b)(p-c)}

代码实现

#include <iostream>
#include <cmath> // 必须包含 cmath 以使用 sqrt
using namespace std;

// 给出三边长求面积
double triangle_area(double a, double b, double c) {
    // 简单的三角形合法性判断 (两边之和大于第三边)
    if (a + b <= c || a + c <= b || b + c <= a) return 0.0; 
    
    double p = (a + b + c) / 2.0;
    return sqrt(p * (p - a) * (p - b) * (p - c));
}

2.5 坐标几何基础

  • 中点公式:点 A(x1,y1)A(x_1, y_1)B(x2,y2)B(x_2, y_2) 的中点坐标为 (x1+x22,y1+y22)(\frac{x_1+x_2}{2}, \frac{y_1+y_2}{2})
  • 曼哈顿距离d=x1x2+y1y2d = |x_1 - x_2| + |y_1 - y_2|。常用于网格行走问题(只能走上下左右)。

2.6 几何中的 π\pi

在 C++ 中使用 π\pi (圆周率),推荐使用反余弦函数 acos 计算,精度较高。

#include <cmath>
const double PI = acos(-1.0); // cos(PI) = -1, 所以 acos(-1) = PI

三、总结

  1. 方程思想:编程解方程更多是依赖公式推导。对于二元一次方程,熟记克莱姆法则(或者能够现场推导)非常有用。
  2. 几何公式:除了基础底乘高,海伦公式是竞赛高频考点,务必掌握。
  3. 浮点数精度:涉及几何和代数运算时,通常会出现小数。要注意使用 double 类型,并在判断相等时考虑精度误差(EPS)。

掌握这些基础数学工具,能让你在解决物理模拟、计算几何等类型的编程题目时游刃有余。


本文由coderli.com原创,按照CC BY-NC-SA 4.0 进行授权

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

luogu-”系列题目可在 洛谷题库 在线评测。

bcqm-”系列题目可在 编程启蒙题库 在线评测。

GESP/CSP认证交流QQ群: 688906745

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
最后更新于