正在载入在线练习界面,本页内容可直接阅读…
AK CSP › CSP-J 2020 第一轮真题 › 第 18 题
CSP-J 2020 第一轮 第 18 题:程序(一):把第一处i<26改成i<16是否影响结果
题目
#include <cstdlib>
#include <iostream>
using namespace std;
char encoder[26] = {'C','S','P',0};
char decoder[26];
string st;
int main() {
int k = 0;
for (int i = 0; i < 26; ++i)
if (encoder[i] != 0) ++k;
for (char x ='A'; x <= 'Z'; ++x) {
bool flag = true;
for (int i = 0; i < 26; ++i)
if (encoder[i] ==x) {
flag = false;
break;
}
if (flag) {
encoder[k]= x;
++k;
}
}
for (int i = 0; i < 26; ++i)
decoder[encoder[i]- 'A'] = i + 'A';
cin >> st;
for (int i = 0; i < st.length( ); ++i)
st[i] = decoder[st[i] -'A'];
cout << st;
return 0;
}
本小题
将第 12 行的 i < 26 改为 i < 16,程序运行结果不会改变。( )
选项
- A. 正确
- B. 错误
答案
A
题解
选 A,正确。
题目修改的是第一处 i < 26,这一段用于统计 encoder 中非零元素的数量:
``cpp for (int i = 0; i < 26; ++i) if (encoder[i] != 0) ++k; ``
数组初始化为:
``cpp char encoder[26] = {'C', 'S', 'P', 0}; ``
没有显式赋值的元素也会被初始化为 0,所以只有前三个元素 'C'、'S'、'P' 非零。
因此,无论检查前 26 个元素还是前 16 个元素,得到的都是 k = 3。这段循环不会修改数组,后续程序的执行也完全相同,所以运行结果不会改变。
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号