正在载入在线练习界面,本页内容可直接阅读…
AK CSP › CSP-J 2020 第一轮真题 › 第 17 题
CSP-J 2020 第一轮 第 17 题:程序(一):非空输入是否一定输出不同
题目
#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;
}
本小题
若输入的字符串不是空串,则输入的字符串与输出的字符串一定不一样。()
选项
- A. 正确
- B. 错误
答案
B
题解
答案是 B. 错误。只要找到一个非空字符串,输入和输出相同,就能推翻“一定不一样”。
程序先把 encoder 补成:以 C、S、P 开头,后面按字母顺序填入剩余字母:
``text 下标对应字母:ABCDEFGHIJKLMNOPQRSTUVWXYZ encoder内容: CSPABDEFGHIJKLMNOQRTUVWXYZ ``
接着,下面这句建立反向映射:
``cpp decoder[encoder[i] - 'A'] = i + 'A'; ``
注意 encoder[19] 是 'T',所以:
``cpp decoder['T' - 'A'] = 19 + 'A'; // 即 'T' ``
因此,输入 T,输出仍然是 T。输入非空,却与输出相同,所以题目说法错误。
实际上,T~Z 这 7 个字母都不会改变,只由这些字母组成的字符串,输入和输出都相同。
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号