CSP-S 提高级 · CSP 2026 提高级第一轮 第 16 题

阅读程序 · 答案 ABC · 考点:位运算、一维数组、进制与编码

← 整套速查表 CSP-S 提高级 全部真题

题目

【阅读程序1】

说明:输入保证为一个长度恰为 32 的 '0'/'1' 字符串。

#include <iostream>
#include <string>
using namespace std;
int a[100];
string s;
int gen[13] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1};
int main() {
    cin >> s;
    for (int i = 0; i < 32; ++i) {
        a[i] = s[i] - '0';
    }
    for (int i = 32; i < 44; ++i) {
        a[i] = 0;
    }
    for (int i = 0; i < 32; ++i) {
        if (a[i] == 0) continue;
        for (int j = 0; j < 13; ++j) {
            a[i + j] ^= gen[j];
        }
    }
    for (int i = 32; i < 44; ++i) {
        cout << a[i];
    }
    cout << endl;
    return 0;
}
答案:ABC

考点

位运算 讲解 →位运算 真题汇总 →一维数组进制与编码

解题思维

看到 CRC 模 2 除法 → 先想:除数多项式、补零移位、高位消去。

常见错误

易把 gen 当被除数;忽略全局数组自动清零,误判补零循环必要性。

详细解析(节选)

考点:CRC 模 2 除法|全局数组特性

解析

程序实现CRC-12校验:将输入视为多项式 M,末尾补 12 个 0(M×2¹²),用 13 位生成式 gen 做模 2 除法,输出 12 位余数。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断