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++;
}

三、模板使用技巧

  1. 套模板步骤
    • 读题 → 确定考点(模拟/排序/贪心/数学)→ 找对应模板 → 改参数/逻辑
  2. 必加边界判断
    • 数组下标:>=0 && <n
    • 数字范围:素数判断x>=2、进制转换x>=0
  3. 调试小技巧
    • 关键步骤加cout输出中间值
    • 先用样例输入手动算一遍,再对比代码输出

总结

  1. C++模板核心是排序+贪心+模拟,这三类模板覆盖80%的四级题目;
  2. 二维数组重点记行优先遍历+上下左右相邻判断
  3. 字符串处理优先用string类,避免字符数组越界问题。
posted @ 2026-03-20 18:23  kkman2000  阅读(2)  评论(0)    收藏  举报