C++ 算法考级专栏
真题分析、矩阵探测、递归回溯与基础语法
🎨 视觉封面【GESP】C++八级考试大纲知识点梳理 (5) 代数与平面几何
GESP C++ 八级考试大纲知识点梳理系列文章:
继上一篇我们探讨了倍增法之后,我们继续深入 GESP C++ 八级大纲。今天我们来聊聊编程中必不可少的数学基础——代数与平面几何。
(5)掌握代数与平面几何基础知识(初中数学部分)。包括方程的概念及一元一次方程、二元一次方程的基本求解技巧,求基础平面几何概念、求基本图形(如长方形、三角形、圆形等)的面积等
虽然 GESP 是编程考试,但数学是算法的基石。在八级考试中,代数和几何通常不会像数学卷子那样考证明题,而是考查利用计算机计算公式的能力以及将几何/代数问题转化为代码逻辑的能力。
本人也是边学、边实验、边总结,且对考纲深度和广度的把握属于个人理解。因此本文更多的不是一个教程,而是个人知识梳理,如有遗漏、疏忽,欢迎指正、交流。
一、代数基础:方程与求解
在计算机科学中,解方程通常是“模拟”或者“公式化”的过程。
1.1 方程的概念
方程是含有未知数的等式。 在 C++ 中,我们并不是像手算一样去“移项、合并同类项”,而是需要推导出一个通用的计算公式,然后让计算机套用公式算出结果。
1.2 一元一次方程 (Linear Equation in One Variable)
标准形式: (其中 是未知数,)
数学求解: 移项得 ,系数化为 1 得 。
编程实现思路: 如果题目给出 和 ,我们只需要一行代码:
double x = -b / a;
注意:在编程中要特别注意 的情况(除数为 0 异常)。如果 且 ,有无数解;如果 且 ,无解。
1.3 二元一次方程组 (Linear Equations in Two Variables)
标准形式:
求解技巧:
在数学课上我们学过“代入消元法”和“加减消元法”。在编程中,为了通用性,我们通常使用公式法(基于克莱姆法则 Cramer's Rule)或者高斯消元法(对于更多元方程)。对于二元一次方程组,公式法最直接。
我们通过加减消元可以推导出 和 的通解公式:
令分母 。 如果 ,则有唯一解:
代码示例:
#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 常见面积公式
| 图形 | 面积公式 () | 周长公式 () | 备注 |
|---|---|---|---|
| 长方形 | 为长和宽 | ||
| 正方形 | 为边长 | ||
| 圆形 | 为半径, 常用 acos(-1.0) |
||
| 三角形 | 基础公式 |
2.2 勾股定理与距离公式 (Pythagorean Theorem)
勾股定理:直角三角形两条直角边 的平方和等于斜边 的平方,即 。
坐标系两点间距离: 已知两点 和 ,根据勾股定理,距离 为:
这是计算几何中最基础的公式,几乎每道几何题都会用到。
2.3 三角形的存在性原理
判断三条线段 能否组成三角形:
- 任意两边之和大于第三边: 且 且 。
- 任意两边之差小于第三边:。
编程判断时,通常写全三个条件。
2.4 海伦公式 (Heron's Formula) —— 三角形面积神器
在编程题中,经常会给出三角形三个顶点的坐标,求面积。或者直接给出三边长 。 此时,求“高”比较麻烦,海伦公式是解决此类问题的首选。
步骤:
- 先计算半周长 :
- 再计算面积 :
代码实现:
#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 坐标几何基础
- 中点公式:点 和 的中点坐标为 。
- 曼哈顿距离:。常用于网格行走问题(只能走上下左右)。
2.6 几何中的
在 C++ 中使用 (圆周率),推荐使用反余弦函数 acos 计算,精度较高。
#include <cmath>
const double PI = acos(-1.0); // cos(PI) = -1, 所以 acos(-1) = PI
三、总结
- 方程思想:编程解方程更多是依赖公式推导。对于二元一次方程,熟记克莱姆法则(或者能够现场推导)非常有用。
- 几何公式:除了基础底乘高,海伦公式是竞赛高频考点,务必掌握。
- 浮点数精度:涉及几何和代数运算时,通常会出现小数。要注意使用
double类型,并在判断相等时考虑精度误差(EPS)。
掌握这些基础数学工具,能让你在解决物理模拟、计算几何等类型的编程题目时游刃有余。
所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI
欢迎加入:C++ GESP/CSP 考级答疑群(688906745) 与 Java/Python交流群(982860385),点击可直接加群。
猜你想读 · 相关文章推荐
【GESP】C++八级考试大纲知识点梳理 (1) 计数原理:加法与乘法
GESP C++ 八级考试大纲知识点梳理系列文章: 1. 计数原理:加法与乘法 2. 排列与组合 3. 杨辉三角与组合数 4. 倍增法 5. 代数与平面几何 GESP C++八级考试大纲正式进入了组合数学的领域。作为八级的第一条考点,计数原理是整个排列组合、概率论乃至后续很多算法(如动态规划)的基石。 (1)掌握计数原...
【GESP】C++八级考试大纲知识点梳理 (2) 排列与组合
GESP C++ 八级考试大纲知识点梳理系列文章: 1. 计数原理:加法与乘法 2. 排列与组合 3. 杨辉三角与组合数 4. 倍增法 5. 代数与平面几何 继上一篇我们探讨了计数原理(加法与乘法原理)之后,GESP 八级考纲的第二个重要考点便是排列与组合。 (2)掌握排列与组合基础知识。包括排列、组合的基本概念,及能...
【GESP】C++八级考试大纲知识点梳理 (3) 杨辉三角与组合数
GESP C++ 八级考试大纲知识点梳理系列文章: 1. 计数原理:加法与乘法 2. 排列与组合 3. 杨辉三角与组合数 4. 倍增法 5. 代数与平面几何 继上一篇我们探讨了排列和组合之后,GESP C++八级大纲的第三条考点非常经典,它是计算机算法(尤其是动态规划)的重要入门案例。 (3)掌握杨辉三角形(又称帕斯卡...
OneCoder (lihongzheshuai)
一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com