正在载入在线练习界面,本页内容可直接阅读…
AK CSP › CSP-J 2020 第一轮真题 › 第 20 题
CSP-J 2020 第一轮 第 20 题:程序(一):输出ABCABCABCA能推出什么
题目
#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;
}
本小题
若输出的字符串为 $\texttt{ABCABCABCA}$,则下列说法正确的是( )。选项
- A. 输入的字符串中既有 S 又有 P
- B. 输入的字符串中既有 S 又有 B
- C. 输入的字符串中既有 A 又有 P
- D. 输入的字符串中既有 A 又有 B
答案
A
题解
答案是 A。关键是看清 encoder 和 decoder 的对应关系。
encoder 的前三个元素是:
下标 i | i + 'A' | encoder[i] |
|---|---|---|
| 0 | A | C |
| 1 | B | S |
| 2 | C | P |
前面的循环只是把剩余字母补到 encoder 后面,不会改变这三个元素。
接着,这句代码建立解码关系:
``cpp decoder[encoder[i] - 'A'] = i + 'A'; ``
因此,程序处理输入时会进行如下替换:
``text 输入:C → 输出:A 输入:S → 输出:B 输入:P → 输出:C ``
现在已知输出,反过来推输入:
``text 输出:A B C A B C A B C A 输入:C S P C S P C S P C ``
所以输入为 CSPCSPCSPC,既有 S 又有 P,没有 A 和 B,选 A。
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号