CCF GESP4 C++ 极简模板代码(速记+套用版)
GESP四级 C++ 极简模板代码(速记+套用版)
模板覆盖CCF GESP4所有高频考点,可直接背诵套用,重点记核心函数/语法的写法!
一、基础输入输出模板
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
// 1. 单个数字/字符串输入
int n;
string s;
cin >> n >> s;
// 2. 整行字符串输入(含空格)
getline(cin, s);
// 3. 多组数据输入(直到文件结束)
while (cin >> n) {
// 处理逻辑
}
// 4. 二维数组输入(n行m列)
int a[100][100];
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> a[i][j];
}
}
// 输出
cout << n << " " << s << endl; // 带换行
printf("%d %.2f\n", n, 3.14); // 格式化输出(小数常用)
return 0;
}
二、核心算法模板
1. 素数判断(必考)
// 判断x是否为素数
bool is_prime(int x) {
if (x < 2) return false;
for (int i = 2; i * i <= x; i++) { // 试除法:到√x即可
if (x % i == 0) return false;
}
return true;
}
// 绝对素数(本身+反转都是素数)
int reverse_num(int x) { // 数字反转
int res = 0;
while (x > 0) {
res = res * 10 + x % 10;
x /= 10;
}
return res;
}
2. 排序(必考)
// 1. 数字数组排序
int a[100] = {5,2,8,1};
sort(a, a+4); // 默认升序:1 2 5 8
sort(a, a+4, greater<int>()); // 降序:8 5 2 1
// 2. 字符串排序
string s[3] = {"banana", "apple", "cherry"};
sort(s, s+3); // 字典序:apple banana cherry
// 3. 自定义规则排序(贪心常用)
// 例:田忌赛马,按战力降序
struct Horse {
int power;
} h1[100], h2[100];
bool cmp(Horse a, Horse b) {
return a.power > b.power; // 降序
}
sort(h1, h1+n, cmp);
sort(h2, h2+n, cmp);
3. 贪心算法(高频)
// 田忌赛马核心逻辑(排序后贪心匹配)
int win = 0;
int l1 = 0, r1 = n-1; // 我方左右指针
int l2 = 0, r2 = n-1; // 对方左右指针
while (l1 <= r1) {
if (h1[r1].power > h2[r2].power) { // 能赢就赢
win++;
r1--; r2--;
} else if (h1[r1].power < h2[r2].power) { // 用最弱的耗最强的
r1--; l2++;
} else { // 相等,看最弱的能不能耗对方最强的
if (h1[l1].power > h2[l2].power) {
win++;
l1++; l2++;
} else {
if (h1[l1].power < h2[r2].power) win--;
l1++; r2--;
}
}
}
4. 二维数组(矩阵/图像)
// 遍历二维数组(行优先)
int mat[100][100];
int n = 5, m = 5;
// 统计每行和
for (int i = 0; i < n; i++) {
int sum = 0;
for (int j = 0; j < m; j++) {
sum += mat[i][j];
}
cout << "第" << i+1 << "行和:" << sum << endl;
}
// 上下左右相邻判断(黑白方块/荒地开垦)
int dx[4] = {-1, 1, 0, 0}; // 上下
int dy[4] = {0, 0, -1, 1}; // 左右
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
for (int k = 0; k < 4; k++) {
int nx = i + dx[k];
int ny = j + dy[k];
// 边界判断
if (nx >= 0 && nx < n && ny >=0 && ny < m) {
// 处理相邻格子
}
}
}
}
5. 字符串处理
string s = "HelloGESP";
// 长度
int len = s.size(); // 9
// 遍历字符
for (int i = 0; i < s.size(); i++) {
char c = s[i];
// 转小写/大写
if (c >= 'A' && c <= 'Z') c += 32;
if (c >= 'a' && c <= 'z') c -= 32;
}
// 字典序比较
if (s1 < s2) cout << "s1更小";
// 相似字符串(逐位比较)
int diff = 0;
for (int i = 0; i < s1.size(); i++) {
if (s1[i] != s2[i]) diff++;
}
三、模板使用技巧
- 套模板步骤:
- 读题 → 确定考点(模拟/排序/贪心/数学)→ 找对应模板 → 改参数/逻辑
- 必加边界判断:
- 数组下标:
>=0 && <n - 数字范围:素数判断
x>=2、进制转换x>=0
- 数组下标:
- 调试小技巧:
- 关键步骤加
cout输出中间值 - 先用样例输入手动算一遍,再对比代码输出
- 关键步骤加
总结
- C++模板核心是排序+贪心+模拟,这三类模板覆盖80%的四级题目;
- 二维数组重点记行优先遍历+上下左右相邻判断;
- 字符串处理优先用
string类,避免字符数组越界问题。

浙公网安备 33010602011771号