2024年BCSP-X小高组基础知识题目(模拟题)

一、单项选择

  1. 计算机的核心部件是什么( )?
  • A. 显示器
  • B. 键盘
  • C. 中央处理器(CPU)
  • D. 鼠标
  1. 将十进制小数 9.375 转换为二进制小数,其正确的二进制表示是( )。
  • A. 1001.11
  • B. 1011.11
  • C. 1001.011
  • D. 1011.011
  1. 假设有一个内存显示为 96MB 的文件夹,里面存储的都是分辨率为 1024 × 2048 的 24 位图像,请问理论上存储了( )张图像?(不考虑图像技术压缩对内存的优化)
  • A. 16 张
  • B. 20 张
  • C. 8 张
  • D. 32 张
  1. 有六个小朋友并排站一列,其中三个小朋友是三胞胎,如果要求这三个三胞胎必须相邻,则有( )种不同排列方法?
  • A. 72
  • B. 48
  • C. 144
  • D. 218
  1. 在 C++中,关于函数参数传递的说法,哪一个是正确的( )?
  • A. C++只支持值传递。
  • B. C++只支持引用传递。
  • C. C++既支持值传递也支持引用传递。
  • D. C++只支持指针传递。
  1. 对于一个 8 位二进制整数,如果其原码是 10000011,则其补码是( )。
  • A. 01111100
  • B. 01111101
  • C. 11111100
  • D. 11111101
  1. 用简单插入排序方法对下面四个序列进行排序(由小到大),元素比较次数最少的是( )。
  • A. 93, 32, 95, 13, 23, 15, 88, 37
  • B. 62, 88, 37, 29, 39, 34, 72, 24
  • C. 86, 76, 68, 26, 53, 12, 35, 59
  • D. 21, 33, 47, 40, 80, 68, 90, 99
  1. 在 C++ 的 STL 中,如果你需要频繁地在序列的任意位置插入和删除元素,以下哪个容器将是最合适的选择( )?
  • A. std::vector
  • B. std::queue
  • C. std::stack
  • D. std::list
  1. 已知一棵二叉树的前序遍历结果为 ABCDEF,中序遍历结果为 CBAEDF,则后序遍历的结果为( )。
  • A. CBEFDA
  • B. FEDCBA
  • C. CBEDFA
  • D. EDCBFA
  1. C++中用于表示枚举类型的关键字是( )。
  • A. struct
  • B. union
  • C. enum
  • D. static
  1. 有以下代码段:
int a[3] = {1, 3, 5}; 
int *p = &a[0];  
int *q = p + 2;
cout << *(p+1) << " " << *q;

执行改代码输出的结果为( )。

  • A. 2 3
  • B. 2 4
  • C. 3 4
  • D. 3 5
  1. 根据下面的流程图计算,若一开始输入的 m 与 n 的值分别为 10710 和 8208,则最后的输出是( )。
    在这里插入图片描述
  • A. 8
  • B. 18
  • C. 90
  • D. 306
  1. 班级组织大家参加信息学比赛,现在要从班里选出 3 人组成一队进行报名,要求每个参赛队伍至少需要有一位女同学。已知班级里一共有 15 个男生,9 个女生,则一共有( )种可能的组合。
  • A. 1569
  • B. 2024
  • C. 1940
  • D. 1485
  1. 一家电信公司提供了多种流量套餐供用户选择,每种套餐有不同的流量上限和价格,并可以重复购买。用户可以根据自己的需求购买套餐,超出套餐的流量将按照更高的单价计费。假设有以下套餐和超出套餐的流量单价:
  • 套餐 A:2GB 流量,价格 3 元
  • 套餐 B:5GB 流量,价格 7 元
  • 套餐 C:10GB 流量,价格 13 元
  • 超出套餐流量单价:2 元/GB

现有用户预计需要使用 128GB 的流量,则该用户最少需要付费( )元?

  • A. 169
  • B. 168
  • C. 167
  • D. 166
  1. 向一个栈顶指针为 h 的带头结点的链栈中插入指针 p 所指的结点,应执行( )。
  • A. h->next = p;
  • B. p->next = h;
  • C. p->next = h; p->next = p;
  • D. p->next = h->next; h->next = p;

二、阅读程序

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

第一题

#include<iostream>
using namespace std;
int x, y, n, m;
int a[1000];
string num="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
void change(int i,int j){
    a[i]^=a[j];
    a[j]^=a[i];
    a[i]^=a[j];
}

int main (){
    cin >> x >> y;
    m=(1<<y)-1;
    while(x!=0){
        n++;
        a[n]=(x&m);
        x=(x>>y);
    }
    for(int i=1; i<=n/2; i++){
        change(i, n-i+1);
    }
    for(int i=1; i<=n; i++){
        cout << num[a[i]];
    }
    return 0;
}
判断题
  1. 将第 4 行接在第 10 行之后,程序会出现编译错误。 ( )
  2. 输入的 y 绝对值在 1000 以内,程序都能正确运行。 ( )
  3. 将程序第 20 行换成 change(n-i+1, i); 不会影响程序结果。 ( )
  4. 输入 37 1,输出结果长度大于 5。(2 分) ( )
选择题
  1. 输入 37 3,输出的结果为 ( )

    • A. 45
    • B. 54
    • C. 0100101
    • D. 1010010
  2. 输入 335 4,输出的结果为 ( )

    • A. 14H
    • B. EH
    • C. 14F
    • D. 1415

第二题

#include<iostream>
using namespace std;
int n, m, Max;
int a[1000][1000];
int Minn(int x,int y,int z){
    int res = x;
    if(res > y) res = y;
    if(res > z) res = z;
    return res;
}
int Square(int x,int y){
    if(x == 1) return a[x][y];
    if(y == 1) return a[x][y];
    int res = a[x][y] + Minn(Square(x-1, y), Square(x, y-1), Square(x-1, y-1));
    Max = max(Max, res);
    if(a[x][y] == 0) res = 0;
    return res;
}
int main (){
    cin >> n >> m;
    for(int i=1; i<=n; i++){
        for(int j=1; j<=m; j++){
            cin >> a[i][j];
        }
    }
    Square(n, m);
    cout << Max;
    return 0;
}
判断题
  1. 删除第 16 行,程序运行结果不会受到任何影响。 ( )
  2. 调用函数 Minn(52, 97, 63)Minn 函数返回的结果为 97。 ( )
  3. 输入 0 0,会导致程序运行无法正常结束。 ( )
选择题
  1. 输入
3 3
1 1 1
1 1 1
1 1 1

输出的结果为 ( )
- A. 2
- B. 3
- C. 6
- D. 9

  1. 输入
4 5
1 0 1 0 1
1 1 1 0 1
1 1 0 1 1
1 1 1 0 1

输出的结果为 ( )
- A. 20
- B. 15
- C. 4
- D. 2

  1. 程序的时间复杂度为 ( )
    - A. O(mn)
    - B. O(mlogn)
    - C. O(n^m)
    - D. O(3^(m+n))

第三题

#include<iostream>
using namespace std;
int fun_1(int x,int y){
   long long res = 0,t = 1;
   while(t<=x/y){
       res++;
       t*=y;
   }
   return res;
}
int fun_2(int y){
   long long l=0,r=y,mid;
   while(l<r){
       mid = (l+r+1)/2;
       if(mid>y/mid){
           r = mid-1;
       }
       else{
           l = mid;
       }
   }
   return l;
}
int main(){
   int a,b;
   cin >> a >> b;
   cout << fun_1( a , b ) << " ";
   cout << fun_1( fun_2(a) , b );
   return 0;
}

假设输入的 x,y 都是大于 1,且不超过 10^6 的正整数

判断题
28. 若输入为"63 2",那么输出的第一个数字为 5 ( )
29. 若将第 22 的 l 改为 mid,那么程序结果一定会变 ( )
30. 若输入的 a 为 b^4(2<=b<=200),那么输出的第一行一定是第二行的两倍 (2 分) ( )

选择题
31. 若输入为"1024 4",那么输出结果为 ( )

  • A. 4 2
  • B. 5 2
  • C. 6 3
  • D. 4 3
  1. 若输入为"282 3",那么输出结果为 ( )
  • A. 4 2
  • B. 5 2
  • C. 5 3
  • D. 4 3
  1. fun_1()和 fun_2()的时间复杂度分别为 ( )
  • A. logy𝑥 |√𝑦
  • B. ylog2𝑥 | log2𝑦
  • C. ylog2𝑥 | √𝑦
  • D. logy𝑥 | log2𝑦

三、完善程序

单选题,每小题 3 分,共计 30 分
1、(统计个数) 给出 n 个数,统计每个数能看到的数字个数。

例如:2 5 1 3 4
第一个数字 2 可以看到:5,因为 5 将 1,3,4 挡住了,一共 1 个
第二个数字 5 可以看到:2,1,3,4 一共 4 个
第三个数字 1 可以看到:5,3,4,因为 5 将 2 挡住了,一共 3 个
第四个数字 3 可以看到:1,5,4,因为 5 将 2 挡住了,一共 3 个
第五个数字 4 可以看到:3,5,因为 3 将 1 挡住了,5 将 2 挡住了,一共 2 个

#include<iostream>
using namespace std;
int a[100];
int b[100];
int now;
int main() {
   int n;
   cin >> n;
   for (int i = 0; i < n; i++) {
       cin >> a[i];
   }
   for (int i = 0; i < n; i++) {
       now =;
       if(i==0 || i==n-1) b[i]=1;
       else b[i] =;
       for (int j =; j >= 0; j--) {
           if (a[j] > now) {
               now = a[j];
               b[i]++;
           }
       }
       now =;
       for (int j =; j < n; j++) {
           if (a[j] > now) {
               now = a[j];
               b[i]++;
           }
       }
   }
   for (int i = 0; i < n; i++) {
       cout << b[i] << " ";
   }
   return 0;
}
  1. ①处应填( )。
  • A. a[i - 1]
  • B. a[i]
  • C. a[i + 1]
  • D. a[i] + 1
  1. ②处应填( )。
  • A. 0
  • B. 1
  • C. 2
  • D. -1
  1. ③处应填( )。
  • A. i-1
  • B. i-2
  • C. i+1
  • D. i+2
  1. ④处应填( )。
  • A. a[i - 1]
  • B. a[i]
  • C. a[i + 1]
  • D. a[i] + 1
  1. ⑤处应填( )。
  • A. i-1
  • B. i-2
  • C. i+1
  • D. i+2

2、(n 的 n 次方之和) 计算1^1 + 2^2 + 3^3 + … + 𝐀^𝐀的高精度值。(1 ≤ 𝐀 ≤ 20)
试补全该程序。

#include<iostream>
#include<string.h>
using namespace std;
const int MAXN=250;
int n, t, i, j, k, la, lb, x[10], a[MAXN], b[MAXN];
void f(int *a){
    for(int i = 0; i < MAXN; i++){
        if(a[i] >= 10){
            a[i+1] += a[i] / 10;
            a[i] %= 10;
        }
    }
}
int main(){
    cin>>n;;
    for(i=2;i<= 9;i++){
        t=1;
        for(j=1;j<=i;j++){
            t*=i;
        }
        x[i]=t;
    }
    for(i=2;i<=9;i++);
    if(!(n/10))
        cout << x[n];
    else{
        for(k=i;k<=n;k++){
            memset(a,0,sizeof(a));
            t=k,la=0;
            while(t){
                a[la++]=t%10;
                t/=10;
            }
            for(i=2;i<=k;i++){
                for(j=0;j<la;j++)
                    a[j]*=k;;
                t=MAXN;
                while(!a[t])
                    t--;
                la=t + 1;
            }
            for(i=0;i<la;i++)
                b[i]+=a[i];
            f(b);
            lb =;
            if(b[lb])
                lb++;
        }
        t=, i=0;
        while(t){
            b[i]+=t%10;
            t/=10;
            i++;
        }
        f(b);
        for(i=lb-1;i>=0;i--)
            cout << b[i];
    }
    return 0;
}
  1. ①处应填( )。
  • A. x[1] = 1
  • B. x[0] = 1
  • C. a[0] = 1
  • D. a[1] = 1
  1. ②处应填( )。
  • A. x[i-1]+=x[i]
  • B. x[i+1]+=x[i]
  • C. x[i]+=x[i-1]
  • D. x[i]+=x[i+1]
  1. ③处应填( )。
  • A. la+=1
  • B. la+=n
  • C. f(b)
  • D. f(a)
  1. ④处应填( )。
  • A. min(lb,la)
  • B. max(lb,la)
  • C. lb*n
  • D. lb+n
  1. ⑤处应填( )。
  • A. x[10]
  • B. x[9]
  • C. x[0]
  • D. x[1]
  • 27
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天秀信奥编程培训

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值