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

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

CSP-J 2020 第一轮 第 19 题:程序(一):把第二处i<26改成i<16是否影响结果

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

题目

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

本小题

将第 26 行的 i < 26 改为 i < 16,程序运行结果不会改变。( )

选项

  • A. 正确
  • B. 错误

答案

B

题解

答案:B. 错误。

第 26~27 行用于建立解码表,原本会给 decoder 的全部 26 个位置赋值。

改成 i < 16 后,只会建立前 16 个映射,其余位置仍是全局数组的初始值 0(空字符 '\0'),因此部分字母无法正确解码。

例如输入 Z:

  • 原程序中,encoder[25] = 'Z',所以 decoder['Z' - 'A'] = 'Z',输出 Z。
  • 修改后,不会执行 i = 25 时的赋值,对应位置仍为 '\0',输出的就不是 Z。

所以,程序运行结果可能改变,题目说法错误。

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