CSP 2020 入门组第一轮 第16题

2021年8月24日 | 分类: 未分类

【题目】

#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;
}

判断题

1) 输入的字符串应当只由大写字母组成,否则在访问数组时可能越界。( √ )
2) 若输入的字符串不是空串,则输入的字符串与输出的字符串一定不一样。( × )
3) 将第 12 行的“i < 26”改为“i < 16”,程序运行结果不会改变。( √ )
4) 将第 26 行的”i < 26”改为“i < 16”,程序运行结果不会改变。( × )

单选题

5) 若输出的字符串为”ABCABCABCA”,则下列说法正确的是( A )。

A. 输入的字符串中既有S又有P
B. 输入的字符串中既有S又有B
C. 输入的字符串中既有A又有P
D. 输入的字符串中既有A又有B

6)若输出的字符串为”CSPCSPCSPCSP”,则下列说法正确的是( D )。

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

【解析】

这样的题目你想要直接读懂程序太难了,所以直接按照程序模拟一遍,带入部分简单数据尝试运行一下,能理解程序的主要原理即可。但是这样的题目,建议多做笔记,多写草稿,将过程记录着,以防有用。

如下程序中就是我所做笔记。

#include <cstdlib>//P16
#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;// 字符个数计数  k=3
  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) {//如果 x未出现,则存入
      //encoder=CSPAB DEFGH IJKLM NOQRT UVWXYZ
        encoder[k]= x;
        ++k;
      }
  }
  for (int i = 0; i < 26; ++i)
     decoder[encoder[i]- 'A'] = i + 'A';
//decoder[C-A]=A
//decoder[S-A]=B
//decoder[P-A]=C
//decoder[A-A]=D
//decoder[B-A]=E
//decoder[D-A]=F
//decoder[E-A]=G
//decoder[F-A]=H
//decoder[G-A]=I
//decoder[H-A]=J
//decoder[I-A]=K
//decoder[J-A]=L
//decoder[K-A]=M
//decoder[L-A]=N
//decoder[M-A]=O
//decoder[N-A]=P
//decoder[O-A]=Q
//decoder[Q-A]=R
//decoder[R-A]=S
//decoder[T-A]=T
//decoder[U-A]=U
//decoder[V-A]=V
//decoder[W-A]=W
//decoder[X-A]=X
//decoder[Y-A]=Y
//decoder[Z-A]=Z

  cin >> st;//假设:CSP
  for (int i = 0; i < st.length( ); ++i)
    st[i] = decoder[st[i] -'A'];
//st=ABC
//str=ABCABCABCA
//str=CSPCSPCSPCSP
  cout << st;
  return 0;
}