真题解析 | CCF CSP-J 2020 入门级 C++语言真题及答案

news2024/9/23 7:24:42

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

解析:常识题。在计算机内存中,每个存储单元都有一个唯一的标识号,这个标识号被称为地址。地址用来唯一标识内存中的每个存储单元,类似于房子的门牌号,可以准确地找到并访问内存中的特定数据。通过地址,计算机可以准确地定位和访问存储单元中的数据,实现数据的读取和写入操作。因此,地址在计算机内存中起着非常重要的作用,确保数据的准确存储和检索。

解析: 常识题。

        编译器是一种将高级语言源代码翻译成机器语言目标代码的程序。它接收程序员编写的高级语言源代码作为输入,经过词法分析、语法分析、语义分析、优化和代码生成等过程,最终生成可被计算机执行的机器指令代码。这样,计算机可以直接执行这些机器指令代码来实现程序的功能。

 

解析: 简单逻辑运算。首先,根据题目给出的条件:

x=true, y=true, z=false。

然后逐个选项计算表达式的值:

A. (y∨z)∧x∧z = (true ∨ false) ∧ true ∧ false = true ∧ true ∧ false = false

B. x∧(z∨y)∧z = true ∧ (false ∨ true) ∧ false = true ∧ true ∧ false = false

C. (x∧y)∧z = (true ∧ true) ∧ false = true ∧ false = false

D. (x∧y)∨(z∨x) = (true ∧ true) ∨ (false ∨ true) = true ∨ true = true

解析: 对图像存储空间的计算,涉及到图像分辨率、位深度和存储空间的关系。

        要存储一张分辨率为2048×1024像素、32位真彩色图像,首先需要计算图像的总像素数,然后根据每个像素的位数计算存储空间。

  1. 计算图像的总像素数:2048×1024=2097152 像素
  2. 每个像素为32位真彩色,即每个像素需要占用32位 = 4字节(1字节=8位)
  3. 计算存储空间: 2097152×4=8388608 字节
  4. 将字节转换为MB: 8388608字节=102428388608​MB≈8MB

解析: 冒泡排序简单考察

        冒泡排序算法的比较次数取决于数组中元素的初始排列顺序。

  •         在最坏情况下,即数组完全逆序时,冒泡排序算法的比较次数为 𝑛(𝑛−1)/2次。
  •         在最好的情况下,即数组已经是按非递减顺序排序好的情况下,冒泡排序算法仍然需要进行𝑛−1次比较。这是因为在每一轮冒泡排序中,虽然不需要进行元素交换,但仍然需要比较相邻元素的大小来确认顺序是否正确。

解析: 递归的简单考察

解析: 链表

        链表是链式存储,需要从头开始遍历读取数据——顺序访问,不可直接读取——随机访问。

解析: 连通图

        用于描述图中顶点之间是否存在路径相连。一个无向图中,如果从图中的任意一个顶点出发,都可以通过边的连接到达图中的任意其他顶点,则该图被称为连通图。

连通图的性质:

  • 连通图中的任意两个顶点之间都存在一条路径。
  • 连通图中的最小生成树是唯一的。
  • 连通图中的边数至少为顶点数减一,否则无法保证所有顶点之间都连通。

解析: 二进制转换

要将二进制数1011转换为十进制数,可以按照以下步骤进行:

1. 从二进制数的最右边开始,从低位到高位,分别对每一位进行计算。
2. 从右向左,第0位是最低位,第n位是最高位,对应的权重为$2^0, 2^1, 2^2, ... , 2^n$。
3. 将每一位的数值乘以对应的权重,然后将所有结果相加即可得到十进制数。

对于二进制数1011:
- 第0位(最右边)为1,对应的权重为$2^0 = 1$,计算结果为$1 \times 2^0 = 1$;
- 第1位为1,对应的权重为$2^1 = 2$,计算结果为$1 \times 2^1 = 2$;
- 第2位为0,对应的权重为$2^2 = 4$,计算结果为$0 \times 2^2 = 0$;
- 第3位为1,对应的权重为$2^3 = 8$,计算结果为$1 \times 2^3 = 8$。

最后,将所有结果相加:$1 + 2 + 0 + 8 = 11$。

因此,二进制数1011转换为十进制数为11。

解析:排列组合

        将双胞胎小朋友看作一个整体,即将两个双胞胎小朋友看作一个人。这样,5个小朋友排成一列的问题就变成了4个小朋友和1对双胞胎小朋友排成一列的问题。 典型的全排列问题 :A(4,4)*A(2,2) = 4! * 2! = 24 x 2 = 48!(四个小朋友全排列 * 两个双胞胎之间互换位置)

解析: 数据结构特性,

         符合先入后出特性,先入在底部,后入在顶部,栈无疑。

  

解析: 完全二叉树

        对于一个完全二叉树,假设其高度为ℎ,则其最少节点数为2^h-1个,最多节点数为2^{h+1}-1个。

        根据题目中给出的信息,独根树的高度为1,即只有一个节点。因此,61个节点的完全二叉树的高度应该在5和6之间。

我们可以通过尝试计算不同高度下的节点数来确定答案:

  • 当高度为5时,节点数范围为25−1=31到26−1=63,不符合61个节点的条件;
  • 当高度为6时,节点数范围为26−1=63到27−1=127,符合61个节点的条件。

解析: 简单数学

        天干:1949%10 = 9(己),地支:1949%12 = 5(丑)

解析: 排列组合

        这个问题是一个经典的分配问题,需要考虑将10个三好学生名额分配到7个班级,每个班级至少有一个名额的情况。

        我们可以使用插板法(Stars and Bars)来解决这个问题。假设我们有10个三好学生名额(星号),需要将它们分配到7个班级(板子)中,每个班级至少有一个名额。

根据插板法的公式,总的分配方案数为 𝐶(𝑛−1,𝑘−1),其中𝑛表示总的名额数,𝑘表示班级数,𝐶表示组合数。

        在这个问题中,𝑛=10,𝑘=7,所以总的分配方案数为 𝐶(10−1,7−1)=𝐶(9,6)。

        

        因此,将10个三好学生名额分配到7个班级,每个班级至少有一个名额的不同分配方案数为84种。

解析:  排列组合

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

第16题🎈 

#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;
  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) {
        encoder[k]= x;
        ++k;
      }
  }
  for (int i = 0; i < 26; ++i)
     decoder[encoder[i]- 'A'] = i + 'A';
  cin >> st;
  for (int i = 0; i < st.length( ); ++i)
    st[i] = decoder[st[i] -'A'];
  cout << st;
  return 0;
}

题目分析: 

  1. 首先定义了两个字符数组 encoder 和 decoder,分别用于加密和解密过程。encoder 数组初始包含三个字符 'C', 'S', 'P',并以0结尾;decoder 数组暂时为空。然后定义了一个字符串 st 用于存储输入的字符串。

  2. 在 main 函数中,首先通过循环计算 k 的值,k 表示 encoder 数组中已有元素的数量。

  3. 接着,通过两层循环遍历字母'A'到'Z',将不在 encoder 数组中的字母依次添加到 encoder 数组中。

  4. 然后,根据 encoder 数组的内容填充 decoder 数组,使得 decoder 数组中的索引与 encoder 数组中的字符对应。

  5. 接下来,程序从标准输入中读取一个字符串,并根据 decoder 数组将字符串中的字符解密为原始字符并输出

•判断题

  1. 输入的字符串应当只由大写字母组成,否则在访问数组时可能越界。( ) 答案与解析: 代码中存在-'A'操作,并且decoder数组大小为26,只有大写字母'A'->'Z',做这样的操作所得值在[0-26]的范围内。
  2. 若输入的字符串不是空串,则输入的字符串与输出的字符串一定不一样。()答案与解析: 错误。
  3. 将第 12 行的 i < 26 改为 i < 16,程序运行结果不会改变。( )答案与解析: 正确。
  4. 将第 26 行的 i < 26 改为 i < 16,程序运行结果不会改变。( )答案与解析: 错误。

•单选题

5) 若输出的字符串为 ABCABCABCAABCABCABCA,则下列说法正确的是( )。

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

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

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

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

 答案与解析: A,

6)若输出的字符串为 CSPCSPCSPCSPCSPCSPCSPCSP,则下列说法正确的是( )。

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

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

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

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

 答案与解析: D,

第17题

#include <iostream>
using namespace std;

long long n, ans;
int k, len;
long long d[1000000];

int main() {
  cin >> n >> k;
  d[0] = 0;
  len= 1;
  ans = 0;
  for (long long i = 0; i <n; ++i) {
    ++d[0];
    for (int j = 0; j + 1<len; ++j) {
      if (d[j] == k) {
        d[j] = 0;
        d[j + 1] += 1;
        ++ans;
      }
    }
    if (d[len- 1] == k) {
      d[len - 1] = 0;
      d[len] =1;
      ++len;
      ++ans;
    }
  }
  cout << ans << endl;
  return 0;
}

  • 判断题
  1. 若 k=1,则输出 ans 时,len=n。( ) 答案与解析: ×
  2. 若 k>1,则输出 ans 时,len —定小于 nn。( ) 答案与解析:  ×
  3. () 答案与解析:  
  • 单选题

 

解析: 

 

解析:

  

解析: 

第18题

#include <algorithm>
#include <iostream>
using namespace std;                     
                                         
int n;                                   
int d[50][2];                            
int ans;                                 
                                        
void dfs(int n, int sum) {               
  if (n == 1) {                            
    ans = max(sum, ans);           
    return;                                   
  }                                        
  for (int i = 1; i < n; ++i) {            
    int a = d[i - 1][0], b = d[i - 1][1];  
    int x = d[i][0], y = d[i][1];            
    d[i - 1][0] = a + x;                     
    d[i - 1][1] = b + y;                     
    for (int j = i; j < n - 1; ++j)            
      d[j][0] = d[j + 1][0], d[j][1] = d[j + 1][1];
    int s = a + x + abs(b - y);              
    dfs(n - 1, sum + s);                    
    for (int j = n - 1; j > i; --j)          
      d[j][0] = d[j - 1][0], d[j][1] = d[j - 1][1];
    d[i - 1][0] = a, d[i - 1][1] = b;        
    d[i][0] = x, d[i][1] = y;                
  }                                        
}                                        
                                       
int main() {                             
  cin >> n;                                
  for (int i = 0; i < n; ++i)              
  cin >> d[i][0];
  for (int i = 0; i < n;++i)
     cin >> d[i][1];
  ans = 0;
  dfs(n, 0);
  cout << ans << endl;
  return 0;
}

假设输入的 nn 是不超过 5050 的正整数,d[i][0]d[i][1] 都是不超过 1000010000 的正整数,完成下面的判断题和单选题:

  • 判断题

    1. 若输入 nn 为 00,此程序可能会死循环或发生运行错误。( ) 答案与解析:× ,
    2. 若输入 nn 为 2020,接下来的输入全为 00,则输出为 00。( ) 答案与解析:√ ,
    3. 输出的数一定不小于输入的 d[i][0] 和 d[i][1] 的任意一个。( ) 答案与解析:×, 
  • 单选题

    1. 若输入的 nn 为 2020,接下来的输入是 2020 个 99 和 2020 个 00,则输出为( )。,解析:

    2. 若输入的 nn 为 3030,接下来的输入是 3030 个 00 和 3030 个 55,则输出为( )。,解析:

    3. (4 分)若输入的 nn 为 1515,接下来的输入是 1515 到 11,以及 1515 到 11,则输出为( )。,解析:

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

第19题

#include <cstdio>
using namespace std;
int n, i;

int main() {
  scanf("%d", &n);
  for(i = ①; ② <=n; i ++){
    ③{
      printf("%d ", i);
      n = n / i;
    }
  }
  if(④)
    printf("%d ", ⑤);
  return 0;
}

1)①处应填( ),解析:

2)②处应填( ),解析:

3)③处应填( ),解析:

4)④处应填( ),解析:

5)⑤处应填( ),解析:

 第 20 题

 

#include <iostream>

using namespace std;

const int MAXN = 5000;
int n, m;
struct segment { int a, b; } A[MAXN];

void sort() // 排序
   {
     for (int i = 0; i < n; i++)
     for (int j = 1; j < n; j++)
     if (①)
         {
           segment t = A[j];
           ②
         }
   }

   int main()
   {
     cin >> n >> m;
     for (int i = 0; i < n; i++)
       cin >> A[i].a >> A[i]・b;
     sort();
     int p = 1;
     for (int i = 1; i < n; i++)
       if (③)
         A[p++] = A[i];
     n = p;
     int ans =0, r = 0;
     int q = 0;
     while (r < m)
     {
       while (④)
         q++;
       ⑤;
       ans++;
     }
     cout << ans << endl;
     return 0;
   }

1)①处应填( ),解析:

2)②处应填( ),解析:

3)③处应填( ),解析:

4)④处应填( ),解析:

5)⑤处应填( ),解析:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2068488.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Stream】流媒体从入门到入土 (1)

最近工作需要学了很多流媒体相关的知识&#xff0c;谁能想象一个月前还是只听说过 HLS 的快乐小屁孩&#xff0c;现在已经背负了巨大的知识的重担了&#xff0c;头发也秃了几根&#xff0c;发际线严重后移 H.264 (AVC) vs H.265 (HEVC) H.264 和 H.265 是两种视频编码&#x…

【学习笔记】Day 22

一、进度概述 1、机器学习常识23-24&#xff0c;以及相关代码复现 2、python 补完计划&#xff08;详见 python 专题&#xff09; 二、详情 23、U-Net 从宏观结构上来讲&#xff08;以下摘自常识23&#xff09;&#xff1a; U-Net 就是 U 形状的网络, 前半部分 (左边…

[Android studio]无法联网

问题情景&#xff1a; 我的Android studio 更新软件到 Android Studio Koala | 2024.1.1 Patch 1 这个版本后&#xff0c;当前的项目无法正常编译。 因为之前有次更新版本后&#xff0c;我也遇到这个无法编译的问题&#xff0c;后面给解决掉了。想着这次应该也没有事情。 可这…

【通信协议】SPI总线

目录 SPI简介 硬件电路 SPI模式 软件模拟初始化 时序基本单元 起始条件 终止条件 发送与接收 SPI基本单元代码 MySPI.h MySPI.c SPI简介 SPI&#xff08;Serial Peripheral Interface&#xff09;&#xff0c;即串行外围设备接口&#xff0c;是由Motorola公司开…

在 FPGA 上实现以太网的“低级”指南

如今&#xff0c;我们日常的网络连接大多是通过无线方式进行的&#xff0c;因此很容易忘记以太网。但它仍然是一种有用的标准&#xff0c;是一个可靠的高吞吐量网络链接的好方法。为此&#xff0c;[Robert Feranec] 和 [Stacy Rieck] 编写了一个关于如何在 FPGA 上使用以太网的…

uniapp实现苹果账号登录

appleLogin(){uni.showToast({title: 正在进行苹果账户登录...,icon: none})uni.login({provider: apple,success: (loginRes) > {uni.getUserInfo({provider: apple,success: async(userInfoRes) > {console.log(用户信息, userInfoRes)// userInfoRes.userInfo.identit…

Python和MATLAB和R对比敏感度函数导图

&#x1f3af;要点 深度学习网络两种选择的强制选择对比度检测贝叶斯自适应估计对比敏感度函数空间观察对比目标量化视觉皮质感知差异亮度、红/绿值、蓝/黄值色彩空间改变OpenCV图像对比度对比敏感度函数模型空间对比敏感度估计眼球运动医学研究空间时间颜色偏心率对比敏感度函…

技术债务已接管经济

“技术债务”一词通常指软件开发过程中的捷径或次优方法。它表现为设计不良的代码、缺乏文档和过时的组件。虽然正确编写的代码和文档是永恒的&#xff0c;但组件和方法却不是。随着时间的推移&#xff0c;软件及其组件可能会成为技术债务。自 40 年前的 20 世纪 80 年代软件行…

Qt使用usbcan通信

一.usbcan环境搭建 可以参照我的这篇博客&#xff1a;USBCAN-II/II使用方法以及qt操作介绍 二.项目效果展示 三.项目代码 这部分代码仅仅展示了部分功能&#xff0c;仅供参考。 #include"ControlCAN.h" #include<QDebug> #include <windows.h> #incl…

位运算,CF 878A - Short Program

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 878A - Short Program 二、解题报告 1、思路分析 顺序处理每个操作&…

数据结构(双向链表)代码详细注释

双向链表 1》双向链表的定义 双向链表也叫双链表&#xff0c;与单向链表不同的是&#xff0c;每一个节点有三个区域组成&#xff1a;两个指针域&#xff0c;一个数据域。 前指针域&#xff1a;存储前驱节点的内存地址 后指针域&#xff1a;存储后继节点的内存地址 数据域&…

Oracle归档日志满了,导致程序打不开,如何解决。

加油&#xff0c;新时代打工人&#xff01; 归档日志错误&#xff0c;登录不上&#xff0c;只能用system 角色登录&#xff0c; 错误提示 oracle 错误257 archiver error connect internal only until freed 解决cmd进入rman RMAN&#xff08;Recovery Manager&#xff09;是一…

喜报 | 麒麟信安“信创云桌面解决方案”在浙江省委党校应用实施,荣膺国家级示范案例

近日&#xff0c;国家工信部网络安全产业发展中心公布了2023年信息技术应用创新解决方案入围获奖名单&#xff0c;麒麟信安“信创云桌面解决方案”在浙江省委党校成功应用实施&#xff0c;获评国家工信部2023年信息技术应用创新解决方案党务政务领域应用示范案例。 据悉&#…

Python、R用RFM模型、机器学习对在线教育用户行为可视化分析|附数据、代码

全文链接&#xff1a;https://tecdat.cn/?p37409 分析师&#xff1a;Chunni Wu 随着互联网的不断发展&#xff0c;各领域公司都在拓展互联网获客渠道&#xff0c;为新型互联网产品吸引新鲜活跃用户&#xff0c;刺激用户提高购买力&#xff0c;从而进一步促进企业提升综合实力和…

Linux--进程管理和性能相关工具

文章目录 进程状态进程的基本状态其他更多态运行(Running或R)可中断睡眠(Interruptible Sleep 或 S)不可中断睡眠(Uninterruptible Sleep 或 D)停止(Stopped 或 T)僵尸(Zombie 或 Z) 状态转换 进程管理相关工具进程树pstreepstree -ppstree -T 进程信息psps输出属性查看进程的父…

C语言-从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件test中保存,输人的字符串以“!”结束

题目要求&#xff1a; 从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件test中保存,输人的字符串以"!”结束 1.实现程序&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {FILE* fp fopen("…

新160个crackme - 038-Eternal Bliss.3

运行分析 需要输入注册码 PE分析 VB程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 使用VB Decompiler静态分析&#xff0c;找到关键函数入口点402AC4 ida跳转至402AC4&#xff0c;按F5反汇编&#xff0c;发现有407行代码&#xff0c;配合VB Decompiler得到的代码…

力扣面试经典算法150题:跳跃游戏 II

跳跃游戏 II 今天的题目是力扣面试经典150题中的数组的中等难度题&#xff1a;跳跃游戏II。 题目链接&#xff1a;https://leetcode.cn/problems/jump-game-ii/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 给定一个非负整数数组 nums&#xff0…

springboot框架中filter过滤器的urlPatterns的匹配源码

如下图所示&#xff0c;我使用WebFilter注解的方式定义了一个过滤器&#xff0c;同时定义了过滤器的过滤条件 urlPatterns为/*,可能很多人都知道filter的/*代表所有URL都匹配&#xff0c;但是源码在哪里呢 先打断点看一下调用链 然后跟着调用链慢慢点&#xff0c;看看哪里开始…

redis面试(二十)读写锁WriteLock

写锁WriteLock 和读锁一样&#xff0c;在这个地方执行自己的lua脚本&#xff0c;我们去看一下 和read没有多大的区别 KEYS[1] anyLock ARGV[1] 30000 ARGV[2] UUID_01:threadId_01:write hget anyLock mode&#xff0c;此时肯定是没有的&#xff0c;因为根本没这个锁 …