#YHCSPJ0011. CSP-J模拟卷11

CSP-J模拟卷11

选择题

  1. (2分)Linux下可执行文件的默认扩展名为()。{{ select(1) }}
  • A. exe
  • B. com
  • C. dll
  • D. 以上都不是
  1. (2分)对n个数用冒泡排序算法排序,最少需要比较多少次?(){{ select(2) }}
  • A. n²
  • B. n-2
  • C. n-1
  • D. n
  1. (2分)地址总线为32位时,理论最大可寻址内存空间为()。{{ select(3) }}
  • A. 128KB
  • B. 1MB
  • C. 1GB
  • D. 4GB
  1. (2分)无向完全图G有7个顶点,共有()条边。{{ select(4) }}
  • A. 7
  • B. 21
  • C. 42
  • D. 49
  1. (2分)下列说法正确的是()。{{ select(5) }}
  • A. CPU的主要任务是执行数据运算和程序控制
  • B. 存储器信息任何时候都不会丢失
  • C. 显示器尺寸相同则分辨率必定相同
  • D. 个人用户只能用Wifi连接Internet
  1. (2分)以A0为起点深度优先遍历无向图,不可能的顺序是()。{{ select(6) }}
  • A. A1
  • B. A2
  • C. A0
  • D. A3
  1. (2分)完全二叉树中第k号结点的父结点存于数组的()号位置。{{ select(7) }}
  • A. 2k
  • B. 2k+1
  • C. ⌊k/2⌋
  • D. ⌊(k+1)/2⌋
  1. (2分)书写错误的32位IP地址是()。{{ select(8) }}
  • A. 162.105.135.27
  • B. 192.168.0.1
  • C. 256.256.129.1
  • D. 10.0.0.1
  1. (2分)三进制下等式XY + ZX = XYX成立,则XY * ZX =()。{{ select(9) }}
  • A. YXZ
  • B. ZXY
  • C. XYZ
  • D. XZY
  1. (2分)7个苹果放到3个盘子(可空),有()种放法。{{ select(10) }}
  • A. 7
  • B. 8
  • C. 21
  • D. 37
  1. (2分)“之”“乎”“者”“也”出现次数为700、600、300、400,“也”的编码长度可能是()。{{ select(11) }}
  • A. 1
  • B. 2
  • C. 3
  • D. 4
  1. (2分)递推式T(n)=T(n-1)+n,T(0)=1,时间复杂度为()。{{ select(12) }}
  • A. O(logn)
  • B. O(nlogn)
  • C. O(n)
  • D. O(n²)
  1. (2分)能让果树浇上水的阀门设置是()。{{ select(13) }}
  • A. B打开,其他关
  • B. AB打开,CD关
  • C. A打开,其他关
  • D. D打开,其他关
  1. (2分)10000以内与10000互质的正整数有()个。{{ select(14) }}
  • A. 2000
  • B. 4000
  • C. 6000
  • D. 8000
  1. (2分)5位车牌倒过来仍是原车牌的数量为()。{{ select(15) }}
  • A. 60
  • B. 125
  • C. 75
  • D. 100

阅读理解1(12分)

#include<iostream>
using namespace std;
int main() {
    const int SIZE=10;
    int height[SIZE], num[SIZE], n, ans; 
    cin>>n; 
    for(int i=0;i<n;i++) { 
        cin>>height[i]; 
        num[i]=1; 
        for(int j=0;j<i;j++) { 
            if((height[j]<height[i])&&(num[j]>=num[i]))
                num[i]=num[j]+1; 
        }
    }
    ans=0;
    for(int i=0;i<n;i++){
        if(num[i]>ans) ans=num[i]; 
    }
    cout<<ans<<endl; 
    return 0; 
}

第16题(1.5分)

height数组输入负数会出错。(){{ select(16) }}

  • 正确
  • 错误

第17题(1.5分)

输出ans≤n。(){{ select(17) }}

  • 正确
  • 错误

第18题(1.5分)

将12行num[j]>=num[i]改为num[j]>num[i],结果不变。(){{ select(18) }}

  • 正确
  • 错误

第19题(1.5分)

将18行num[i]>ans改为num[i]>=ans,结果不变。(){{ select(19) }}

  • 正确
  • 错误

第20题(3分)

输入10个1,输出:{{ select(20) }}

  • A. 4
  • B. 3
  • C. 2
  • D. 1

第21题(3分)

输入3 2 5 11 12 7 4 10 15 6,输出:{{ select(21) }}

  • A. 4
  • B. 5
  • C. 6
  • D. 7

阅读理解2(14分)

#include <iostream>
using namespace std;
const int maxn = 10000;
int n;
int a[maxn];
int b[maxn];
int f(int l, int r, int depth) {
    if (l > r)
        return 0;
    int min = maxn, mink;
    for (int i = l; i <= r; ++i) {
        if (min > a[i]) {
            min = a[i];
            mink = i;
        }
    }
    int lres = f(l, mink - 1, depth + 1);
    int rres = f(mink + 1, r, depth + 1);
    return lres + rres + depth * b[mink];
}
int main() {
    cin >> n;
    for (int i = 0; i < n; ++i)
        cin >> a[i];
    for (int i = 0; i < n; ++i)
        cin >> b[i];
    cout << f(0, n - 1, 1) << endl;
    return 0;
}

第22题(2分)

若a数组有重复数字,程序会出错。(){{ select(22) }}

  • 正确
  • 错误

第23题(2分)

若b数组全为0,输出为0。(){{ select(23) }}

  • 正确
  • 错误

第24题(2分)

n=100时,最坏情况下第12行比较次数接近:{{ select(24) }}

  • A. 5000
  • B. 600
  • C. 6
  • D. 100

第25题(2分)

n=100时,最好情况下第12行比较次数接近:{{ select(25) }}

  • A. 100
  • B. 6
  • C. 5000
  • D. 600

第26题(3分)

n=10时,b[i]=i+1,输出最大为:{{ select(26) }}

  • A. 386
  • B. 383
  • C. 384
  • D. 385

第27题(3分)

n=100时,b[i]=1,输出最小为:{{ select(27) }}

  • A. 582
  • B. 580
  • C. 579
  • D. 581

阅读理解3(14分)

#include<bits/stdc++.h>
using namespace std;
#define MOD 19260817
#define MAXN 1005
long long A[MAXN][MAXN]={0}, sum[MAXN][MAXN]={0};
int n, m, q;
int main(){
    A[1][1]=A[1][0]=1;
    for(int i=2;i <= 1000; i++) {
        A[i][0]=1;
        for(int j = 1; j <= i; j++)
            A[i][j]=(A[i-1][j]+A[i-1][j-1])%MOD;
    }
    for(int i =1;i <= 1000; i++)
        for(int j=1;j<=1000;j++)
            sum[i][j]=(sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+A[i][j]+MOD)%MOD;
    int q;
    cin >> q;
    while(q--){
        int n, m;
        cin >> n >> m;
        cout << sum[n][m] << endl;
    }
    return 0;
}

第28题(1.5分)

i≤j时,A[i][i]=0。(){{ select(28) }}

  • 正确
  • 错误

第29题(1.5分)

i>j时,A[i][j]是i选j的排列数。(){{ select(29) }}

  • 正确
  • 错误

第30题(3分)

sum[i][j]≥sum[i-1][j-1]。(){{ select(30) }}

  • 正确
  • 错误

第31题(3分)

第12行改为A[i][j]=(A[i-1][j]+A[i-1][j-1]+MOD)%MOD,结果不变。(){{ select(31) }}

  • 正确
  • 错误

第32题(3分)

A[i][j](1≤i,j≤10)的最大值是:{{ select(32) }}

  • A. 126
  • B. 276
  • C. 252
  • D. 210

第33题(3分)

输入1/5 3,输出:{{ select(33) }}

  • A. 10
  • B. 35
  • C. 50
  • D. 24

编程填空1(15分)

题目描述: 切割绳子

#include<iostream>
using namespace std;
int n, m, i, lbound, ubound, mid, count;
int len[100]; // 绳子长度
int main()
{
    cin >> n;
    count = 0;
    for (i = 0; i < n; i++)
    {
        cin >> len[i];
        ①;
    }
    cin >> m;
    if (②)
    {
        cout << "Failed" << endl;
        return 0;
    }
    lbound = 1;
    ubound = 1000000;
    while (③)
    {
        mid = ④;
        count = 0;
        for (i = 0; i < n; i++)
            ⑤;
        if (count < m)
            ubound = mid - 1;
        else
            lbound = mid;
    }
    cout << lbound << endl;
    return 0;
}

第34题(3分)①处应填(){{ select(34) }}

  • A. count = count + len[i]
  • B. count += len[i]
  • C. count = len[i]
  • D. count += 1

第35题(3分)②处应填(){{ select(35) }}

  • A. count < m
  • B. count > m
  • C. m == 0
  • D. n < m

第36题(3分)③处应填(){{ select(36) }}

  • A. lbound >= ubound
  • B. lbound < ubound
  • C. lbound > ubound
  • D. lbound != ubound

第37题(3分)④处应填(){{ select(37) }}

  • A. (lbound + ubound) / 2
  • B. (lbound + ubound + 1) / 2
  • C. lbound + (ubound - lbound) / 2
  • D. ubound - (ubound - lbound) / 2

第38题(3分)⑤处应填(){{ select(38) }}

  • A. count += len[i] % mid
  • B. count += len[i] / mid
  • C. count = len[i] / mid
  • D. count = len[i] % mid

编程填空2(15分)

题目描述: 排列数

#include <iostream>
#include <cstring>
using namespace std;
const int SIZE =25;
bool used[SIZE];
int data[SIZE];
int n,m,i,j,k;
bool flag;
int main()
{
    cin>>n>>m;
    memset(used,false,sizeof(used));
    for(i=1;i<=m;i++)
    {
        data[i]=i;
        used[i]=true;
    }
    flag=true;
    while(flag)
    {
        for(i=1;i<=m-1;i++) cout<<data[i]<<" ";
        cout<<data[m]<<endl;
        flag= [    ①    ] ;
        for(i=m;i>=1;i--)
        {
            [    ②     ];
            for(j=data[i]+1;j<=n;j++)
                if(!used[j])
                {
                    used[j]=true;
                    data[i]=[    ③  ] ;
                    flag=true;
                    break;
                }
            if(flag)
            {
                for(k=i+1;k<=m;k++)
                    for(j=1;j<= [   ④   ];j++)
                        if(!used[j])
                        {
                            data[k]=j;
                            used[j]=true;
                            break;
                        }
                [     ⑤   ];
            }
        }
    }
    return 0;
}

第39题(3分)①处应填(){{ select(39) }}

  • A. true
  • B. false
  • C. i < m
  • D. i > 1

第40题(3分)②处应填(){{ select(40) }}

  • A. used[data[i]] = true
  • B. used[data[i]] = false
  • C. data[i] = 0
  • D. used[i] = false

第41题(3分)③处应填(){{ select(41) }}

  • A. i
  • B. j
  • C. data[i] + 1
  • D. n

第42题(3分)④处应填(){{ select(42) }}

  • A. m
  • B. n
  • C. i
  • D. k

第43题(3分)⑤处应填(){{ select(43) }}

  • A. break
  • B. continue
  • C. flag = false
  • D. used[j] = false