阅读程序 · 答案 BAD · 考点:进制与编码、字符串(string)、字符数组与字符串处理
← 整套速查表 CSP-S 提高级 全部真题  假设输入总是合法的(一个整数和一个不含空白字符的字符串,用空格隔开),完成下面的判断题和单选题:
28. 程序总是先输出 一行 一个整数,再输出 一行 一个字符串。( )
29. 对于任意不含空白字符的字符串 str1,先执行程序输入0 str1,得到输出的第二行记为 str2 再执行程序输入1 str2,输出的第二行必为 str1。( )
30. 当输入为1 SGVsbG93b3JsZA==时,输出的第二行为HelloWorld。( )
31. 设输入字符串长度为 $n$,encode 函数的时间复杂度为( )。 A. $O( \sqrt{n})$ B. $O(n)$ C. $O(n\log n)$ D. $O(n^2)$
32. 输出的第一行为( )。 A. 0xff B. 255 C. 0xFF D. -1
33. (4 分) 当输入为 0 CSP2021csp 时,输出的第二行为( )。 A. Q1NQMjAyMWNzcAv= B. Q1NQMjAyMGNzcA== C. Q1NQMjAyMGNzcAv= D. Q1NQMjAyMWNzcA==
这题核心是Base64编码解码机制。拿到题先盯住flag参数:0是编码(字符串→Base64),1是解码(Base64→字符串)。编码时每3字节变4字符,末尾补'=';解码要还原二进制再转字符。输出格式别被第一行校验值带偏,第二行才是关键。
最容易栽跟头的地方有三处:一是把flag=0和flag=1搞反,导致编码结果当成解码去验证;二是忽略Base64末尾的填充规则,比如输入长度不是3的倍数时少补或多补'=',导致选项全错;三是大小写敏感问题,Base64字符集里A-Z和a-z完全独立,像判断题30里把'X'写成'x'或者大小写混用,直接判定错误。还有学生常盯着第一行输出,以为那是答案,其实那是校验码或错误标识,真正考的是第二行字符串。
字符串处理、字符数组与字符串、进制与编码、Base64编码原理