#CSP011. 入门级CSP-J第11套初赛模拟试题

入门级CSP-J第11套初赛模拟试题

一、单项选择题(共15题,每题2分,共计30分)

  1. 十六进制数 -73 的8位二进制补码是( ) {{ select(1) }}
  • 10001110
  • 10001101
  • 01110010
  • 01110011
  1. 以下关于CSP-J/S的描述错误的是( ) {{ select(2) }}
  • CSP-J/S非专业认证在校生与在职人员皆可参加
  • CSP-J/S是中国计算机学会举办的程序设计竞赛
  • CSP-J/S属于NOI系列赛事
  • CSP-J/S认证者可在认证完成离开考场后重新返回考场
  1. 以下语言中,同时符合面向对象和解释执行的是什么语言( ) {{ select(3) }}
  • Python
  • C
  • C++
  • Pascal
  1. 小明家买了一台4K超清电视,其屏幕分辨率是4096×2160,每一个像素都是32位真彩色。一个视频文件有2分钟,每秒钟播放24帧。在没有压缩的情况下,这个视频占用空间最接近以下哪个值( ) {{ select(4) }}
  • 80GB
  • 25GB
  • 100GB
  • 200GB
  1. 假设一个待排序数组已基本有序,以下排序算法效率最高的是( ) {{ select(5) }}
  • 插入排序
  • 快速排序
  • 堆排序
  • 选择排序
  1. 一个包含m个分支结点(非叶子结点)的非空满n叉树,n ≥ 1,它的叶结点数目为( ) {{ select(6) }}
  • mn+1
  • mn-1
  • nm+m-1
  • nm-m+1
  1. 前缀表达式 - * a + b c d 的后缀表达式是( ) {{ select(7) }}
  • a b c d * + -
  • a b c + * d -
  • a b c * + d -
  • - + * a b c d
  1. 下列关于CPU的说法哪个是正确的?( ) {{ select(8) }}
  • CPU全称为中央计算器
  • Intel公司发明了世界上最早的CPU
  • CPU能直接运行机器语言
  • 同样主频下,64位的CPU比32位的CPU运行速度快一倍
  1. 关于计算机网络,下面的说法哪个是正确的?( ) {{ select(9) }}
  • 网络协议之所以分层主要是新技术需要兼容历史上老的实现方案
  • 新一代互联网使用的IPv5标准是IPv4标准的升级与补充
  • TCP/IP是互联网的基础协议,包含有传输层和网络层的通信协议
  • 互联网上每一台主机都需要注册一个固定的域名来对应其IP地址
  1. 设哈希表的地址空间为0到10,散列函数为 hash(n) = n mod 11,用线性探查法解决碰撞。现从空的哈希表开始,依次插入关键码值84, 25, 38, 57, 71,则最后一个关键码71的地址为( ) {{ select(10) }}
  • 7
  • 6
  • 5
  • 4
  1. 十进制数0.25等于十六进制数的多少?( ) {{ select(11) }}
  • 0.10
  • 0.80
  • 0.64
  • 0.40
  1. 以下逻辑表达式恒为真的是( ) {{ select(12) }}
  • A∨(¬A∧B)∨(A∧B)
  • B∨(¬A∧B)∨(A∧¬B)
  • A∨B∨(¬A∧B)∨(A∧¬B)
  • A∨¬B∨(¬A∧B)∨(A∧¬B)
  1. 已知 rand() 可以生成一个0到32767的随机整数,如果希望得到一个范围在 [m, n] 的随机整数,m和n均是不超过1024的正整数且 m < n,那么可行的表达式是什么?( ) {{ select(13) }}
  • rand()%(n-m)+m
  • rand()%(n-m+1)+m
  • rand()%(n-m)+m+1
  • rand()%(n-m+1)+m+1
  1. CSP-J初赛结束后,某学校1位教练带4名女生和5名男生排成一行拍照留念,要求男生必须排在一起,老师在中间,女生也必须排在一起,那么不同的排列方式共有( )种 {{ select(14) }}
  • 2880
  • 5760
  • 8640
  • 11520
  1. 一张有10个结点的非连通无向图最多有( )条边 {{ select(15) }}
  • 40
  • 81
  • 72
  • 36

二、阅读程序(共计40分;判断题每题1.5分,选择题每题3分,特殊标注除外)

(一)数值交换

#include<iostream>
using namespace std;
int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    a=a*b;
    b=a/b;
    a=a/b;
    c=a/b;
    cout<<a<<" "<<b<<" "<<c<<endl;
    return 0;
}

判断题 16. 若输入2 4 1,则输出4 2 2。( ) {{ select(16) }}

  • 正确
  • 错误
  1. 若输入1234567890 8 5,则输出a和b分别是8和1234567890。( ) {{ select(17) }}
  • 正确
  • 错误
  1. 将第1行头文件#include<iostream>替换成#include<bits/stdc++.h>,程序运行结果不会改变。( ) {{ select(18) }}
  • 正确
  • 错误
  1. 将第1行头文件替换成#include<cstdio>,第11行替换为printf("%d%d%d\n",a,b,c);,程序运行结果不会改变。( ) {{ select(19) }}
  • 正确
  • 错误

选择题 20. 若输入数据为3 7 3,则输出为( ) {{ select(20) }}

  • 7 3 3
  • 7 3 2
  • 3 7 3
  • 3 7 2
  1. 若将第10行c=a/b改成c=b*a,输入0 4 3,则输出是( ) {{ select(21) }}
  • 4 0 0
  • 4 0 3
  • 0 4 0
  • 程序出错无输出

(二)欧拉函数计算

#include<bits/stdc++.h>
using namespace std;
int n,m,result,a[101],b[101];
int power (int x,int y)
{
    int i,ret=1;
    for(i=1;i<=y;++i)
        ret*=x;
    return ret;
}
int main()
{
    int i=2;
    cin>>n;
    while(i!=n)
    {
        if(0==n%i)
        {
            ++m;
            a[m]=i;
            while(0==n%i)
            {
                ++b[m];
                n/=i;
            }
        }
        ++i;
    }
    result=1;
    for(i=1;i<=m;++i)
    {
        result*=(a[i]-1)*power(a[i],b[i]-1);
    }
    cout<<result;
}

判断题 22. 不管输入什么值,程序的输出值一定比输入值大。( ) {{ select(22) }}

  • 正确
  • 错误
  1. 若输入n是一个质数,则输出值result也可能是一个质数。( ) {{ select(23) }}
  • 正确
  • 错误
  1. 若输入n是一个质数,程序执行到第29行时,i的值等于刚开始输入的n。( ) {{ select(24) }}
  • 正确
  • 错误
  1. 若输入n的值等于正整数c的正整数d次方 c^d(c,d ≥ 2),程序的第15行循环执行完成后,m的值为1,a[1]的值为c。( ) {{ select(25) }}
  • 正确
  • 错误

选择题 26. 若输入 n=2400,则输出result为( ) {{ select(26) }}

  • 640
  • 1200
  • 2400
  • 960
  1. 若输出 result = 2400,则输入n可能为( ) {{ select(27) }}
  • 3200
  • 9000
  • 6400
  • 7200

(三)字符串字符统计

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str;
    char ch1,ch2;
    getline(cin,str);
    ch1=ch2=' ';
    for(int i=0;i<str.size();++i){
        if(ch1<str[i])
        {
            ch2=ch1;
            ch1=str[i];
        }
        else if(ch2<str[i])
            ch2=str[i];
    }
    if(isalpha(ch1))
        ch1=';';
    if(isdigit(ch2))
        ch2=ch2-'0'+48;
    cout<<ch1<<" "<<int(ch2)<<endl;
    return 0;
}

判断题 28. 若将第8行替换为cin>>str;,程序运行结果不会改变。( ) {{ select(28) }}

  • 正确
  • 错误
  1. 若输入字符串只包含大写字母,则输出int(ch2)一定小于91。( ) {{ select(29) }}
  • 正确
  • 错误
  1. 若将第20行替换为ch1^=32;,程序运行结果不会改变。( ) {{ select(30) }}
  • 正确
  • 错误
  1. 若输入555555,程序运行结果输出为5 5。( ) {{ select(31) }}
  • 正确
  • 错误

选择题 32. 若输入数据为654321,程序运行结果输出为( ) {{ select(32) }}

  • 6 5
  • 6 53
  • 1 2
  • 6 1
  1. 若输入只有3个数字型字符,输出为3 50,则输入一共有多少种不同方案( ) {{ select(33) }}
  • 18
  • 24
  • 8
  • 32
  1. (4分)若输入数据为The 19th Asian Games Hangzhou 2022,则输出是( ) {{ select(34) }}
  • Z 117
  • z 117
  • Z 9
  • z 9

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

(一)最少按键问题

给出由0和1组成的初始字符串与目标字符串。按下某一位置的字符时,该位置及其左右相邻字符会翻转(0变1,1变0),两端位置仅影响自身与相邻一侧。求使初始串变为目标串的最少按键次数,无法完成则输出0。

#include<bits/stdc++.h>
using namespace std;
string a,b,temp;
int MIN=0,push_cnt;
void change(int i)
{
    if(i>=0 && ①)
    {
        if(②)
            temp[i]='1';
        else
            temp[i]='0';
    }
}
void push(int i)
{
    change(i-1);
    change(i);
    change(i+1);
    ③;
}
void traverse()
{
    for(int i=1;i<a.size();i++)
    {
        if(④)
        {
            push(i);
        }
    }
    if(temp==b && push_cnt<MIN)
        ⑤;
}
int main()
{
    cin>>a>>b;
    MIN=0x3F3F3F3F;
    //第1种情况,按第1个字符
    push_cnt=0;
    temp=a;
    push(0);
    traverse();
    //第2种情况,不按第1个字符
    push_cnt=0;
    temp=a;
    traverse();
    if(MIN==0x3F3F3F3F)
        cout<<0;
    else
        cout<<MIN;
    return 0;
}
  1. ①处应填( ) {{ select(35) }}
  • i<a.size()
  • i<=a.size()
  • i<=a.length()
  • i<=sizeof(a)
  1. ②处应填( ) {{ select(36) }}
  • '0'==temp[i-1]
  • '0'==temp[i]
  • '0'==temp[i+1]
  • 0==temp[i]
  1. ③处应填( ) {{ select(37) }}
  • push_cnt++
  • push_cnt--
  • MIN=push_cnt+1
  • MIN =push_cnt
  1. ④处应填( ) {{ select(38) }}
  • temp[i-1]!=a[i-1]
  • temp[i-1]==a[i-1]
  • temp[i-1]!=b[i-1]
  • temp[i-1]==b[i-1]
  1. ⑤处应填( ) {{ select(39) }}
  • push_cnt++
  • push_cnt--
  • MIN =push_cnt+1
  • MIN = push_cnt

(二)堆排序

#include<iostream>
#include<algorithm>
using namespace std;
void heap_change(int*arr,int i,int len)
{
    int l_kid=2*i;
    int r_kid=2*i+1;
    int max=i;
    if(i<=len/2)
    {
        if(①)
        {
            max=l_kid;
        }
        if(②)
        {
            max=r_kid;
        }
        if(③)
        {
            swap(arr[i],arr[max]);
            ④
        }
    }
}
void build_heap(int*arr,int len)
{
    for(int i=len/2;i>=1;--i)
    {
        heap_change(arr,i,len);
    }
}
void heap_sort(int*arr,int len)
{
    int i;
    build_heap(arr,len);
    for(i=len;i>=1;--i)
    {
        swap(arr[1],arr[i]);
        ⑤;
    }
}
void print_value(int*a, int len)
{
    for(int i=1;i<=len;++i)
    {
        cout<<a[i]<<" ";
    }
    cout<<endl;
}
int main()
{
    int n;
    cin>>n;
    int a[n+1];
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    print_value(a,n);
    heap_sort(a,n);
    print_value(a,n);
    return 0;
}
  1. ①处应填( ) {{ select(40) }}
  • l_kid>len && arr[l_kid] >arr[max]
  • l_kid<=len && arr[l_kid]>arr[max]
  • r_kid>len && arr[r_kid]>arr[max]
  • r_kid<=len && arr[r_kid]>arr[max]
  1. ②处应填( ) {{ select(41) }}
  • l_kid>len && arr[l_kid]>arr[max]
  • l_kid<=len && arr[l_kid]>arr[max]
  • r_kid>len && arr[r_kid]>arr[max]
  • r_kid<=len && arr[r_kid] >arr[max]
  1. ③处应填( ) {{ select(42) }}
  • max
  • max!=i
  • max%2
  • max<=size
  1. ④处应填( ) {{ select(43) }}
  • heap_change(arr, i, len)
  • heap_change(arr, max, len)
  • heap_change(arr, max-1, len)
  • heap_change(arr, max, len/2)
  1. ⑤处应填( ) {{ select(44) }}
  • heap_change(arr, 1,i)
  • heap_change(arr, 1, i+1)
  • heap_change(arr,1,i-1)
  • heap_change(arr, 1,len)