正在载入在线练习界面,本页内容可直接阅读…

AK CSP › CSP-J 2020 第一轮真题 › 第 21 题

CSP-J 2020 第一轮 第 21 题:程序(一):输出CSPCSPCSPCSP能推出什么

阅读程序 · 数组与字符串 · 难度 中等 · 答案 D

题目

#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;
}
CSP-J 2020 第一轮 第 21 题 原题
原题扫描(页面加载后可直接在线作答)

本小题

若输出的字符串为 $\texttt{CSPCSPCSPCSP}$,则下列说法正确的是( )。

选项

  • A. 输入的字符串中既有 P 又有 K
  • B. 输入的字符串中既有 J 又有 R
  • C. 输入的字符串中既有 J 又有 K
  • D. 输入的字符串中既有 P 又有 R

答案

D

题解

正确答案是 D。关键是看清 encoder 和 decoder 的对应关系。

先把 encoder 补全:前三个字符是 C、S、P,随后按字母顺序填入剩下的字母,跳过已经出现的 C、S、P:

``text 下标对应字母:ABCDEFGHIJKLMNOPQRSTUVWXYZ encoder 内容:CSPABDEFGHIJKLMNOQRTUVWXYZ ``

接着这句代码建立反向映射:

``cpp decoder[encoder[i] - 'A'] = i + 'A'; ``

也就是说,输入字符为 encoder[i] 时,输出的是第 i 个字母(从 0 开始)。

因此,根据输出反推输入:

输出字符下标 i输入字符 encoder[i]
C2P
S18R
P15N

输出为 CSPCSPCSPCSP,输入就必须是:

``text PRNPRNPRNPRN ``

其中既有 P 又有 R,所以选 D。

真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1 京公网安备11010502062986号