CSP 2023 入门级第一轮

第 1 题

一、单项选择题(共 15 题,每题 2 分,共计 30 分;每题有且仅有一个正确选项)

在 C++ 中,下面哪个关键字用于声明一个变量, 其值不能被修改?

  1.  A. 

    unsigned

     B. 

    const

     C. 

    static

     D. 

    mutable


本题共 2 分

第 2 题

八进制数 12345670_8123456708​ 和 07654321_8076543218​ 的和为

  1.  A. 

    22222221_8222222218​

     B. 

    21111111_8211111118​

     C. 

    22111111_8221111118​

     D. 

    22222211_8222222118​


本题共 2 分

第 3 题

阅读下述代码,请问修改 data 的 value 成员以存储 3.143.14,正确的方式是

union Data{
    int num;
    float value;
    char symbol;
};
union Data data;
  1.  A. 

    data.value = 3.14;

     B. 

    value.data = 3.14;

     C. 

    data -> value = 3.14;

     D. 

    value->data = 3.14;


本题共 2 分

第 4 题

假设有一个链表的节点定义如下:

struct Node { int data; Node* next; }

现在有一个指向链表头部的指针:Node* head。如果想要在链表中插入一个新节点,其成员 data 的值为 4242,并使新节点成为链表的第一个节点,下面哪个操作是正确的?

  1.  A.

    Node* newNode = new Node; newNode->data = 42; newNode->next = head; head = newNode;

     B.

    Node* newNode = new Node; head->data = 42; newNode->next = head; head = newNode;

     C.

    Node* newNode = new Node; newNode->data = 42; head->next = newNode;

     D.

    Node* newNode = new Node; newNode->data = 42; newNode->next = head;


本题共 2 分

第 5 题

根节点的高度为 11,一棵拥有 20232023个节点的三叉树高度至少为()。

  1.  A. 

    6

     B. 

    7

     C. 

    8

     D. 

    9


本题共 2 分

第 6 题

小明在某一天中依次有七个空闲时间段,他想要选出至少一个空闲时间段来练习唱歌,但他希望任意两个练习的时间段之间都有至少两个空闲的时间段让他休息。则小明一共有()种选择时间段的方案。

  1.  A. 

    31

     B. 

    18

     C. 

    21

     D. 

    33


本题共 2 分

第 7 题

以下关于高精度运算的说法错误的是()

  1.  A. 

    高精度计算主要是用来处理大整数或需要保留多位小数的运算

     B. 

    大整数除以小整数的处理的步骤可以是,将被除数和除数对齐,从左到右逐位尝试将除数乘以某个数,通过减法得到新的被除数,并累加商

     C. 

    高精度乘法的运算时间只与参与运算的两个整数中长度较长者的位数有关

     D. 

    高精度加法运算的关键在于逐位相加并处理进位


本题共 2 分

第 8 题

后缀表达式 6 2 3 + - 3 8 2 / + * 2 ^ 3 + 对应的中缀表达式是

  1.  A. 

    ((6-(2+3))*(3+8/2))^2+3

     B. 

    6-2+3*3+8/2^2+3

     C. 

    (6-(2+3))*((3+8/2)^2)+3

     D. 

    6-((2+3)*(3+8/2))^2+3


本题共 2 分

第 9 题

数 101010_21010102​ 和 166_81668​ 的和为 ( )

  1.  A. 

    (10110000)_2(10110000)2​

     B. 

    (236)_8(236)8​

     C. 

    (158)_{10}(158)10​

     D. 

    (A0)_{16}(A0)16​


本题共 2 分

第 10 题

假设有一组字符 {a,b,c,d,e,f}, 对应的频率分别为 5\%,9\%,12\%,13\%,16\%,45\%5%,9%,12%,13%,16%,45%。请问以下哪个选项是字符abcdef分别对应的一组哈夫曼编码?

  1.  A. 

    1111,1110,101,100,110,0

     B. 

    1010,1001,1000,011,010,00

     C. 

    000,001,010,011,10,11

     D. 

    1010,1011,110,111,00,01


本题共 2 分

第 11 题

给定一棵二叉树,其前序遍历结果为:ABDECFG,中序遍历结果为:DEBACFG。请问这棵树的正确后序遍历结果是什么?

  1.  A. 

    EDBGFCA

     B. 

    EDGBFCA

     C. 

    DEBGFCA

     D. 

    DBEGFCA


本题共 2 分

第 12 题

考虑一个有向无环图,该图包含 44 条有向边:(1,2),(1,3),(2,4)(1,2),(1,3),(2,4) 和 (3,4)(3,4)。以下哪个选项是这个有向无环图的一个有效的拓扑排序?

  1.  A. 

    4,2,3,1

     B. 

    1,2,3,4

     C. 

    1,2,4,3

     D. 

    2,1,3,4


本题共 2 分

第 13 题

在计算机中,以下哪个选项描述的数据存储容量最小()

  1.  A. 

    字节 (byte)

     B. 

    比特 (bit)

     C. 

    字 (word)

     D. 

    千字节 (kilobyte)


本题共 2 分

第 14 题

一个班级有 1010 个男生和 1212 个女生。如果要选出一个 33 人的小组,并且小组中必须至少包含 11 个女生,那么有多少种可能的组合?()

  1.  A. 

    14201420

     B. 

    17701770

     C. 

    15401540

     D. 

    22002200


本题共 2 分

第 15 题

以下哪个不是操作系统?()

  1.  A. 

    Linux

     B. 

    Windows

     C. 

    Android

     D. 

    HTML


本题共 2 分

第 16 题

二、阅读程序(程序输入不超过数组或字符串定义的范围;判断题正确填 √,错误填 ⨉ ;除特殊说明外,判断题 1.5 分,选择题 3 分,共计 40 分)

1.

#include<iostream>
#include<cmath>
using namespace std;

double f(double a,double b,double c){
    double s=(a+b+c)/2;
    return sqrt(s*(s-a)*(s-b)*(s-c));
}
int main(){
   cout.flags(ios::fixed);
   cout.precision(4);
   
   int a,b,c;
   cin>>a>>b>>c;
   cout<<f(a,b,c)<<endl;
   return 0;
}

假设输入的所有数都为不超过 10001000 的正整数,完成下面的判断题和单选题:

判断题

  1. (2分)当输入为 2 2 2 时,输出为1.7321( )

  2. (2分)将第7行中的 (s-b)*(s-c) 改为 (s-c)*(s-b) 不会影响程序运行的结果( )

  3. (2分)程序总是输出四位小数( )

单选题

  1. 当输入为 3 4 5 时,输出为( )

  2. 当输入为 5 12 13 时,输出为( )

  1. 1. A. 

    正确

     B. 

    错误

  2. 2. A. 

    正确

     B. 

    错误

  3. 3. A. 

    正确

     B. 

    错误

  4. 4. A. 

    6.0000

     B. 

    12.0000

     C. 

    24.0000

     D. 

    30.0000

  5. 5. A. 

    24.0000

     B. 

    30.0000

     C. 

    60.0000

     D. 

    120.0000


本题共 12 分

第 17 题

2.

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int f(string x,string y){
    int m=x.size();
    int n=y.size();
    vector<vector<int>>v(m+1,vector<int>(n+1,0));
   for(int i=1;i<=m;i++){
       for(int j=1;j<=n;j++){
            if(x[i-1]==y[j-1]){
                v[i][j]=v[i-1][j-1]+1;
            }else{
                v[i][j]=max(v[i-1][j],v[i][j-1]);
            }
        }
    }
    return v[m][n];
}
bool g(string x,string y){
    if(x.size() != y.size()){
        return false;
    }
    return f(x+x,y)==y.size();
}
int main(){
    string x,y;
    cin>>x>>y;
    cout<<g(x,y)<<endl;
    return 0;
}

判断题

  1. f 函数的返回值小于等于 \min\{n,m\}min{n,m}。()

  2. f 函数的返回值等于两个输入字符串的最长公共子串的长度。()

  3. 当输入两个完全相同的字符串时,g 函数的返回值总是 true。()

单选题

  1. 将第19行中的 v[m][n] 替换为 v[n][m],那么该程序()。

  2. 当输入为 csp-j p-jcs 时,输出为()。

  3. 当输入为 csppsc spsccp 时,输出为()。

  1. 1. A. 

    正确

     B. 

    错误

  2. 2. A. 

    正确

     B. 

    错误

  3. 3. A. 

    正确

     B. 

    错误

  4. 4. A. 

    行为不变

     B. 

    只会改变输出

     C. 

    一定非正常退出

     D. 

    可能非正常退出

  5. 5. A. 

    0

     B. 

    1

     C. 

    T

     D. 

    F

  6. 6. A. 

    T

     B. 

    F

     C. 

    0

     D. 

    1


本题共 13.5 分

第 18 题

3.

#include <iostream>
#include <cmath>
using namespace std;
int solve1(int n){
    return n*n;
}
int solve2(int n){
   int sum=0;
   for(int i=1;i<=sqrt(n);i++){
        if(n%i==0){
            if(n/i==i){
                sum+=i*i;
            }else{
                sum+=i*i+(n/i)*(n/i);
            }
        }
    }
    return sum;
}
int main(){
    int n;
    cin>>n;
    cout<<solve2(solve1(n))<<" "<<solve1((solve2(n)))<<endl;
    return 0;
}

假设输入的 nn 是绝对值不超过 10001000 的整数,完成下面的判断题和单选题。

判断题

  1. 如果输入的 nn 为正整数,solve2 函数的作用是计算 nn 所有的因子的平方和( )

  2. 第 13\sim 1413∼14 行的作用是避免 nn 的平方根因子 ii(或 n/in/i )进入第 1616 行而被计算两次( )

  3. 如果输入的 nn 为质数,solve2(n) 的返回值为 n^2+1n2+1( )

单选题

  1. (4分)如果输入的 nn 为质数 pp 的平方,那么 solve2(n) 的返回值为( )

  2. 当输入为正整数时,第一项减去第二项的差值一定( )

  3. 当输入为 5 时,输出为( )

  1. 1. A. 

    正确

     B. 

    错误

  2. 2. A. 

    正确

     B. 

    错误

  3. 3. A. 

    正确

     B. 

    错误

  4. 4. A. 

    p^2+p+1p2+p+1

     B. 

    n^2+n+1n2+n+1

     C. 

    n^2+1n2+1

     D. 

    p^4+2p^2+1p4+2p2+1

  5. 5. A. 

    大于 00

     B. 

    大于等于 00 且不一定大于 00

     C. 

    小于 00

     D. 

    小于等于 00 且不一定小于 00

  6. 6. A. 

    651 625

     B. 

    650 729

     C. 

    651 676

     D. 

    652 625


本题共 14.5 分

第 19 题

三、完善程序(单选题,每小题 3 分,共计 30 分)

  1. (寻找被移除的元素)问题: 原有长度为 n+1n+1 公差为 11 等差数列,将数列输到程序的数组时移除了一个元素,导致长度为 nn 的连续数组可能不再连续,除非被移除的是第一个或最后一个元素。需要在数组不连续时,找出被移除的元素。试补全程序。
#include <iostream>
#include <vector>
using namespace std;
int find_missing(vector<int>& nums) {
    int left = 0, right = nums.size() - 1;
    while (left < right){
        int mid = left + (right - left) / 2;
        if (nums[mid] == mid + ①) {
            ②;
        } else {
            ③;
        }
    }
    return ④;
}
int main() {
    int n;
    cin >> n;
    vector<int> nums(n);
    for (int i = 0; i < n; i++) cin >> nums[i];
    int missing_number = find_missing(nums);
    if (missing_number == ⑤) {
        cout << "Sequence is consecutive" << endl;
    }else{
        cout << "Missing number is " << missing_number << endl;
    }
    return 0;
}
  1. ①处应填( )
  2. ②处应填( )
  3. ③处应填( )
  4. ④处应填( )
  5. ⑤处应填( )
  1. 1. A. 

    1

     B. 

    nums[0]

     C. 

    right

     D. 

    left

  2. 2. A. 

    left=mid+1

     B. 

    right=mid-1

     C. 

    right=mid

     D. 

    left=mid

  3. 3. A. 

    left=mid+1

     B. 

    right=mid-1

     C. 

    right=mid

     D. 

    left=mid

  4. 4. A. 

    left+nums[0]

     B. 

    right+nums[0]

     C. 

    mid+nums[0]

     D. 

    right+1

  5. 5. A. 

    nums[0]+n

     B. 

    nums[0]+n-1

     C. 

    nums[0]+n+1

     D. 

    nums[n-1]


本题共 11 分

第 20 题

  1. (编辑距离)给定两个字符串,每次操作可以选择删除(Delete)、插入(Insert)、替换(Replace),一个字符,求将第一个字符串转换为第二个字符串所需要的最少操作次数。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int min(int x, int y, int z) {
    return min(min(x, y), z);
}
int edit_dist_dp(string str1, string str2) {
    int m = str1.length();
    int n = str2.length();
    vector<vector<int>> dp(m + 1, vector<int>(n + 1));
    for (int i = 0; i <= m; i++) {
        for (int j = 0; j <= n; j++) {
            if (i == 0)
                dp[i][j] = ①;
            else if (j == 0)
                dp[i][j] = ②;
            else if (③)
                dp[i][j] = ④;
            else
                dp[i][j] = 1 + min(dp[i][j - 1], dp[i - 1][j], ⑤);
        }
    }
    return dp[m][n];
}
int main() {
    string str1, str2;
    cin >> str1 >> str2;
    cout << "Mininum number of operation:" << edit_dist_dp(str1, str2) << endl;
    return 0;
}
  1. ①处应填( )
  2. ②处应填( )
  3. ③处应填( )
  4. ④处应填( )
  5. ⑤处应填( )
  1. 1. A. 

    j

     B. 

    i

     C. 

    m

     D. 

    n

  2. 2. A. 

    j

     B. 

    i

     C. 

    m

     D. 

    n

  3. 3. A. 

    str1[i-1]==str2[j-1]

     B. 

    str1[i]==str2[j]

     C. 

    str1[i-1]!=str2[j-1]

     D. 

    str1[i]!=str2[j]

  4. 4. A. 

    dp[i-1][j-1]+1

     B. 

    dp[i-1][j-1]

     C. 

    dp[i-1][j]

     D. 

    dp[i][j-1]

  5. 5. A. 

    dp[i][j] + 1

     B. 

    dp[i-1][j-1]+1

     C. 

    dp[i-1][j-1]

     D. 

    dp[i][j]


本题共 15 分

答案:

1.BDAACBCADAABBAD

2.AABAB ABADBD AAABDC

3.BACAD ABABC 

给个关注吧

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2023 csp-j入门级第一轮试题是中国计算机科学会议(CSP)针对初学者设计的一道题。根据题目的具体要求,试题内容可能涉及算法、编程语言、数据结构等方面的知识。 对于这样的试题,学生们需要运用自己所学的知识和技能,通过编程实现题目要求。例如,可能需要设计一个算法来解决一个具体的问题,或者使用特定的数据结构来组织和处理数据。 为了完成这样的试题,学生们首先需要理解题目的要求和限制条件,确保对题目中涉及的概念和术语有所了解。接下来,他们需要分析问题,确定解决问题的方法和步骤。在实际编程实现时,可以选择合适的编程语言和工具,并按照题目要求进行编码。 在完成编码后,学生们需要进行测试和调试,确保程序能够正确运行并得到正确的结果。在测试过程中,可以使用一些已知的测试用例来验证程序的正确性,并对程序进行优化,以提高其性能。 最后,将代码提交,并等待评审结果。评审过程可能涉及代码质量、算法复杂度、正确性等方面的考量。根据评审结果,学生们可以了解自己的编程水平和不足之处,并进行相应的学习和提高。 总体来说,解答2023 csp-j入门级第一轮试题需要学生在编程基础上运用算法数据结构的知识,进行问题的分析和解决。通过这样的学习和实践,学生们可以提高自己的编程能力,并逐渐成长为优秀的程序员。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值