历年CSP-J初赛真题解析 | 2020年CSP-J初赛阅读程序(16-21)

学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。

附上汇总贴:历年CSP-J初赛真题解析 | 汇总_csp历年真题_热爱编程的通信人的博客-CSDN博客


#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;  //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中出现
            encoder[k] = x;
            ++k;
        }
    } 
    //循环结束encoder = [C,S,P,A,B,D,E,F...]
    for (int i = 0; i < 26; ++i)  
        decoder[encoder[i] - 'A'] = i + 'A';  //d['C']='A' e['A']='C'
    //循环结束decoder = [D,E,A,F,G,H,I,J...]
    cin >> st;
    for (int i = 0; i < st.length(); ++i)
        st[i] = decoder[st[i] - 'A'];
    cout << st;
    return 0;
}

16、输入的字符串应当只由大写字母组成,否则在访问数组时可能越界。( )

【答案】:对

【解析】

decoder的范围是0-26,30行是st[i]-'A',所以st[i]必须是大写字母。

17、若输入的字符串不是空串,则输入的字符串与输出的字符串一定不一样。( )

【答案】:错

【解析】

encoder = [C S P A B D E F G H I J K L M N O Q R T U V W X Y Z]

decoder = [D E A F G H I J K L M N O P Q C R S B T U V W X Y Z]

两个字符列表,从T以后加密和解密都是自己。所以是错误的

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

【答案】:

【解析】

第13行的目的是求出k=3,改为i<16后,k还是等于3,所以结果不变

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

【答案】:错

【解析】

如果只求前16个,那后10的decoder的值就会发生变化

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

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

B.输入的字符串中既有 S 又有 B

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

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

【答案】:

【解密】

输出(解密)的字符为A,那就是加密之前是A,输入的字符就应该是加密后的字符。

加密前 = [A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]

加密后 = [C S P A B D E F G H I J K L M N O Q R T U V W X Y Z]

即encoder[A]=C,encoder[B]=S,encoder[C]=P

decoder[C]=A,decoder[S]=B,decoder[P]=C

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

A.输入的字符串中既有P又有 K

B.输入的字符串中既有 J 又有 R

C.输入的字符串中既有 J 又有 K

D.输入的字符串中既有 P 又有 R

加密前 = [A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]

加密后 = [C S P A B D E F G H I J K L M N O Q R T U V W X Y Z]

即encoder[C]=P,encoder[S]=R,encoder[P]=N

decoder[P]=C,decoder[R]=S,decoder[N]=P

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/132840573