第十一届蓝桥杯C++青少年组中/高级组国赛2020年10月真题解析

一、单选题

第1题

在数组中,数组名表示( ).

A:数组第1个元素的首地址
B:数组第2个元素的首地址
C:数组所有元素的首地址,
D:数组最后1个元素的首地址

答案:A
数组名是一个地址,指向第一个元素

第2题

下列叙述中正确的是( ).

A:顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的
B:顺序存储结构只针对线性结构,链式存储结构只针对非线性结构
C:顺序存储结构能存储有序表,链式存储结构不能存储有序表
D:链式存储结构比顺序存储结构节省存储空间

答案:A
数组和链表,一个地址空间连续一个地址空间不一定连续。

第3题

下列排序方法中,最坏情况下比较次数最少的是( ).

A:冒泡排序
B:简单的选择排序
C:直接插入排序
D:堆排序

答案:D
按照时间复杂度分析 A、B、C 都是O(n^logn)级别

第4题

下列表达式正确的是( ).

A:9++
B:(x+y)++
C:c+++c+++c++
D:++(a-b–)

答案:C
9是一个常量,常量不能自增自减,而(x+y)和下面的(a-b–)都是作为一种只读内存区存在的,所以都不能进行自增自减操作。

第5题

针对以下代码,判断下列说法哪个是正确的( ).
const char str1[]=“abc”;
const char str2[] =“abc”;
const char *p1 =“abc”;
const char *p2 =“abc”;

A:str1和str2地址不同,P1和P2地址相同
B:str1和str2地址相同,P1和P2地址相同
C:str1和str2地址不同,P1和P2地址不同
D:str1和str2地址相同,P1和P2地址不同

答案:C

二、编程题

第6题:求阶乘

提示信息:
阶乘定义:一个正整数的阶乘是所有小于及等于该数的正整数的乘积。
例如:3的阶乘6(也就是123的结果)
例如:5的阶乘120(也就是1234*5的结果)
题目描述:
输入一个正整数N(3<=N<=20),输出1到N之间(包含1和N)所有正整数阶乘的和。
例如:输入为3,1的阶乘为1,2的阶乘为2,3的阶乘为6,1+2+6=9,则输出9。
输入描述
输入一个正整数N(3<=N<=20)
输出描述
输出1到N之间(包含1和N)所有正整数阶乘的和

样例输入

3

样例输出

9

答案:
参考代码一:

#include <iostream>
using namespace std;
long long sum=0;
int n;
int main(){cin>>n;for(int i=1;i<=n;i++){int f=1;for(int j=1;j<=i;j++){f*=j;}sum+=f;}cout<<sum;return 0;    
}

参考代码二:

#include <iostream>
using namespace std;
long long f[21],sum=1;
int n;
int main(){cin>>n;f[1]=1;for(int i=2;i<=n;i++){f[i]=f[i-1]*i;sum+=f[i];}cout<<sum;return 0;
} 

第7题:判断偶数

题目描述:
输入两个不相等的四位正整数N(1000<=N<=9999)和M(1000<=M<=9999),其中N<M,中间以一个空格隔开,输出N与M之间(包含N和M)所有满足要求的正整数且正整数之间以一个英文逗号隔开。
要求每个正整数的各个位上的数都为偶数(注:0为偶数)
输入描述
在一行输入两个不相等的四位正整数N和M(N和M之间以一个空格隔开)
输出描述
输出N与M之间(包含N和M)所有满足要求的正整数且正数之间以一个英文逗号隔开

样例输入

4000 4008

样例输出

4000,4002,4004,4006,4008

答案:
参考代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,flag;
bool check(int x){while(x){if(x%10%2!=0) return false;x/=10;}return true;
}
int main(){cin>>n>>m;for(int i=n;i<=m;i++){if(check(i)){if(flag)cout<<',';else flag=1;cout<<i;}}return 0;
}

第8题:计数

题目描述
输入一个正整数n(1 <=n<= 1000),统计从1到n之间(包含1和n)所有正整数中,0,1,2,3,4,5,6,7,8,9的数字分别出现的次数,且按样例分行输出(按0到9顺序输出,英文逗号前为0到9的数字,逗号后为该数字出现的次数)。
例如:n为12,那么1到n之间所有的正整数有1,2,3,4,5,6,7,8,9,10,11,12.
在12个正整数中数字0出现了1次数字1出现了5次数字2出现了2次数字2,3,4,5,6,7,8,9分别出现了1次。
输入描述
输入一个正整数n
输出描述
0,0出现的次数
1,1出现的次数
2,2出现的次数
………
9,9出现的次数

样例输入

10

样例输出

0,1
1,2
2,1
3,1
4,1
5,1
6,1
7,1
8,1
9,1

答案:
参考代码一:

#include <iostream>
#include <vector>
using namespace std;int main() {int n;cin >> n;vector<int> count(10, 0); // 用于统计每个数字出现的次数for (int i = 1; i <= n; i++) {int num = i;while (num > 0) {int digit = num % 10; // 获取当前数字的最低位count[digit]++;       // 对应数字的次数加一num /= 10;            // 去掉最低位}}for (int i = 0; i <= 9; i++) {cout << i << "," << count[i] << endl;}return 0;
}

参考代码二:

#include <bits/stdc++.h>
using namespace std;
int n, cnt[10];
void getans(int x) {for (; x; x /= 10)++cnt[x % 10];
}
int main() {ios::sync_with_stdio(0);cin.tie(0);cin >> n;for (int i = 1; i <= n; ++i)getans(i);for (int i = 0; i < 10; ++i)cout << i << ',' << cnt[i] << '\n';return 0;
}

评分标准:
10分:能正确输出一组数据;
20分:能正确输出两组数据;
20分:能正确输出三组数据。

第9题:找公共子串

题目描述:
分行输入两个字符串(2<=字符串长度<=100),找出两个字符串中最大的公共子串,然后将公共子串及公共子串的长度分行输出
例如:输入两个宇串为abcdab和baabcd,其最大的公共子串为"abcd",子串长度为4.
输入描述
第一行输入一个字符串
第二行输入一个字符串
输出描述
第一行输出最大公共子串
第二行输出最大公共子串长度

样例输入

abcdab
baabcd

样例输出

abcd
4

答案:
参考代码一:

#include <bits/stdc++.h>
using namespace std;
string a, b;
int main() {cin >> a >> b;for (int l = a.size(); l >= 1; l--) {for (int i = 0; i <= a.size() - l; i++) {if (b.find(a.substr(i, l)) < b.size()) {cout << a.substr(i, l) << endl;cout << l;return 0;}}}return 0;
}

参考代码二:

#include <bits/stdc++.h>
using namespace std;
string s1, s2;
int st, len;
int main() {ios::sync_with_stdio(0);cin.tie(0);cin >> s1 >> s2;int l1 = s1.size(), l2 = s2.size();for (int i = 0; i < l1; ++i) {for (int j = 0; j < l2; ++j) {for (int k = 1; i + k - 1 < l1 && j + k - 1 < l2; ++k) {if (s1[i + k - 1] != s2[j + k - 1])break;if (k > len) {len = k;st = i;}}}}for (int i = 0; i < len; ++i)cout << s1[i + st];cout << '\n' << len << '\n';return 0;
}

评分标准:
10分:能正确输出一组数据;
20分:能正确输出两组数据;
20分:能正确输出三组数据。

第10题:最少问题

题目描述:
输入两个整数n(0<n<100001)和k(0<k<100001),通过对n连续进行加1或减1或乘以2这3种操作,使得n最后结果正好等于k(同一种操作可以使用多次也可以不使用),要求最后输出最少的操作次数。
例如:n为5,k为17,通过减1、乘以2、乘以2、加1四次操作得到17,也就是5-1=4,42=8、82=16,16+1=17.
输入描述
输入两个整数n和k(n和k之间以一个空格隔开)
输出描述
输出最少的操作次数

样例输入

5 17

样例输出

4

答案:
参考代码一:

#include <cstdio>
#include <iostream>
#include <queue>using namespace std;
struct node {int pos, step;
};
int v[100005];
queue<node> q;
int main() {int n, k;cin >> n >> k;v[n] = 1;q.push((node){n, 0});while (!q.empty()) {node t = q.front();q.pop();// cout<<t.pos<<" "<<t.step<<endl;if (t.pos == k) {cout << t.step << endl;break;}if (t.pos + 1 < 100005 && v[t.pos + 1] == 0) {v[t.pos + 1] = 1;q.push((node){t.pos + 1, t.step + 1});}if (t.pos - 1 >= 0 && v[t.pos - 1] == 0) {v[t.pos - 1] = 1;q.push((node){t.pos - 1, t.step + 1});}if (t.pos * 2 < 100005 && v[t.pos * 2] == 0) {v[t.pos * 2] = 1;q.push((node){t.pos * 2, t.step + 1});}}return 0;
}

参考代码二:

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 8;
int ans[N], n, k;
queue<int> q;
void bfs() {ans[n] = 0;q.push(n);while (!q.empty()) {int x = q.front();q.pop();if (x * 2 < N && ans[x * 2] == -1) {ans[x * 2] = ans[x] + 1;q.push(x * 2);}if (x + 1 < N && ans[x + 1] == -1) {ans[x + 1] = ans[x] + 1;q.push(x + 1);}if (x - 1 > 0 && ans[x - 1] == -1) {ans[x - 1] = ans[x] + 1;q.push(x - 1);}}
}
int main() {ios::sync_with_stdio(0);cin.tie(0);cin >> n >> k;memset(ans, -1, sizeof(ans));bfs();cout << ans[k] << '\n';return 0;
}

评分标准:
20分:能正确输出一组数据;
20分:能正确输出两组数据;
20分:能正确输出三组数据。

第11题:回形取数

提示信息:
回形取数是沿着一个数字矩阵的左上角向下开始移动取数当前方没有数字或者数字已经被取过就会左转继续移动取数当没有数可取时回形取数结束,如下图所示
在这里插入图片描述

回形取数结束后会产生一条线路图,也就是数字线路。
上路为:1,5,9,13,14,15,16,12,8,4,3,2,6,10,11,7
题目描述:
用户分行输入两个正整数(2<=正整数<=20),第一个数代表数字矩阵的行数,第二个数代表数字矩阵的列数,数字矩阵的数字为从1开始的正整数,根据回形取数规则将最终的数字线路输出(数字线路中的每个数字之间需要有一个英文逗号隔开)。
例如:
输入的是2和3数字矩阵为:
1 2 3
4 5 6
数字线路为:1,4,5,6,3,2
输入的是4和3数字矩阵为:
1 2 3
4 5 6
7 8 9
10 11 12
数字线路为:1,4,7,10,11,12,9,6,3,2,5,8
注:数字矩阵不需要输入此处只为展示
输入描述
第一行输入一个正整数作为行数
第二行输入一个正整数作为列数
编出描述
根据回形取数规则将数字线路输出(数字线路中的每数字之间需要有一个英文逗号隔开)

样例输入

3
2

样例输出

1,3,5,6,4,2

答案:
参考代码一:

#include <cstdio>
#include <iostream>using namespace std;
int v[105][105], a[105][105];
int main() {int n, m, k = 0;int i, j;cin >> n >> m;for (i = 0; i < n; i++)for (j = 0; j < m; j++)a[i][j] = ++k;i = k = 1;j = 0;cout << a[0][0];v[0][0] = 1;while (k < n * m) {while (i < n && v[i][j] == 0) {cout << "," << a[i][j];v[i][j] = 1;i++;k++;}i--;j++;while (j < m && v[i][j] == 0) {cout << "," << a[i][j];v[i][j] = 1;j++;k++;}i--;j--;while (i >= 0 && v[i][j] == 0) {cout << "," << a[i][j];v[i][j] = 1;i--;k++;}i++;j--;while (j >= 0 && v[i][j] == 0) {cout << "," << a[i][j];v[i][j] = 1;j--;k++;}i++;j++;}return 0;
}

参考代码二:

#include <bits/stdc++.h>
using namespace std;
const int N = 28;
const int dx[4] = {1, 0, -1, 0};
const int dy[4] = {0, 1, 0, -1};
int n, m, a[N][N], cnt;
vector<int> ans;
int main() {ios::sync_with_stdio(0);cin.tie(0);cin >> n >> m;for (int i = 1; i <= n; ++i)for (int j = 1; j <= m; ++j)a[i][j] = ++cnt;int x = 1, y = 1, k = 0;while (cnt) {ans.push_back(a[x][y]);a[x][y] = 0;--cnt;if (a[x + dx[k]][y + dy[k]])x += dx[k], y += dy[k];elsek = (k + 1) & 3, x += dx[k], y += dy[k];}for (unsigned i = 0; i < ans.size(); ++i) {if (i == ans.size() - 1)cout << ans[i] << '\n';elsecout << ans[i] << ',';}return 0;
}

评分标准:
20分:能正确输出一组数据;
20分:能正确输出两组数据;
20分:能正确输出三组数据。

第12题:带分数

提示信息:
带分数是分数的一种形式,带分数包含两个部分:整数部分和真分数部分.
在这里插入图片描述

例如:
5用带分数形式可表示为:3+2956/1478,3+2956/1478,3+9562/4781,3+9712/4856
要求:带分数中,数字1-9分别出现且只出现一次。
5的带分数形式有4种表示法.
输出这个正整数满足要求的带分数表示方法,一共有多少种

样例输入

100

样例输出

11

答案:
参考代码一:

// 带分数(暴力枚举)
#include <algorithm>
#include <cstdio>
#include <iostream>using namespace std;
int n, cnt = 0;
int p[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
bool check(int x, int y) {int a, b, c;a = b = c = 0;for (int i = 0; i < x; i++)a = a * 10 + p[i];for (int i = x; i < y; i++)b = b * 10 + p[i];for (int i = y; i < 9; i++)c = c * 10 + p[i];if (b % c == 0 && a + b / c == n)return true;elsereturn false;
}
int main() {cin >> n;do {for (int i = 1; i < 7; i++)for (int j = i + 1; j < 8; j++)if (check(i, j))cnt++;} while (next_permutation(p, p + 9));cout << cnt << endl;return 0;
}

参考代码二:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n, a[18], sum[18], pw[18], ans;
inline ll num(int st, int ed) {return sum[ed] - pw[ed - st + 1] * sum[st - 1];
}
int main() {ios::sync_with_stdio(0);cin.tie(0);cin >> n;pw[0] = 1;for (int i = 1; i <= 9; ++i)a[i] = i, pw[i] = pw[i - 1] * 10;do {for (int i = 1; i <= 9; ++i)sum[i] = sum[i - 1] * 10 + a[i];for (int i = 1; i <= 8; ++i) {ll zs = sum[i];for (int j = i + 1; j <= 8; ++j) {ll fz = num(i + 1, j), fm = num(j + 1, 9);if (fz % fm == 0 && zs + fz / fm == n)++ans;}}} while (next_permutation(a + 1, a + 10));cout << ans << '\n';return 0;
}

评分标准:
20分:能正确输出一组数据;
20分:能正确输出两组数据;
20分:能正确输出三组数据。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中继器、集线器、网桥、交换机、路由器和网关

目录 前言一、中继器、集线器1.1 中继器1.2 集线器 二、网桥、交换机2.1 网桥2.1.1 认识网桥2.1.2 网桥的工作原理2.1.3 生成树网桥 2.2 交换机2.2.1 交换机的特征2.2.2 交换机的交换模式2.2.3 交换机的功能 三、路由器、网关3.1 路由器的介绍3.2 路由器的工作过程3.2.1 前置知…

多客圈子论坛系统 httpGet 任意文件读取漏洞复现

0x01 产品简介 多客圈子论坛系统是一种面向特定人群或特定话题的社交网络&#xff0c;它提供了用户之间交流、分享、讨论的平台。在这个系统中&#xff0c;用户可以创建、加入不同的圈子&#xff0c;圈子可以是基于兴趣、地域、职业等不同主题的。用户可以在圈子中发帖、评论、…

17- Redis 中的 quicklist 数据结构

在 Redis 3.0 之前&#xff0c;List 对象的底层数据结构是双向链表或者压缩列表&#xff0c;然后在 Redis 3.2 的时候&#xff0c;List 对象的底层改由 quicklist 数据结构实现。 其实 quicklist 就是【双向链表 压缩列表】组合&#xff0c;因为一个 quicklist 就是一个链表&…

【产品研发】NPDP价值作用概述

导读&#xff1a;本文结合个人实践和思考对NPDP的价值和作用做了概述说明&#xff0c;对于产品经理而言掌握NPDP的知识体系并且应用到实际工作中&#xff0c;这是非常有必要的。走出以往狭隘的产品研发工作认知&#xff0c;以开放心态学习国际化产品创新开发流程将极大提升产品…

深度学习的舌象诊断:从舌头上了解系统性疾病!

首先 深度学习算法能否解决东方医学中依靠医生经验的诊断问题&#xff1f;而要实现这个目标&#xff0c;需要什么呢&#xff1f; 用舌头诊断被称为口腔健康的指标&#xff0c;但在东方医学中&#xff0c;舌头也被用来评估全身的状况。换句话说&#xff0c;通过分析舌头的图像…

Java学习-JDBC(一)

JDBC 概念 JDBC(Java Database Connectivity)Java数据库连接JDBC提供了一组独立于任何数据库管理系统的APIJava提供接口规范&#xff0c;由各个数据库厂商提供接口的实现&#xff0c;厂商提供的实现类封装成jar文件&#xff0c;也就是我们俗称的数据库驱动jar包JDBC充分体现了…

C#上位机开发

目录 一、上位机简介二、C#语法三、新建VS工程四、WinForm控件4.1 属性4.2 事件4.3 窗体方法4.4 常用控件4.5 布局 五、Serial上位机5.1 UI界面设计5.2 功能设计 六、项目打包成安装包6.1 前提准备6.2 打包步骤 一、上位机简介 在单片机项目开发中&#xff0c;上位机也是一个很…

SwiftUI六组合复杂用户界面

代码下载 应用的首页是一个纵向滚动的地标类别列表&#xff0c;每一个类别内部是一个横向滑动列表。随后将构建应用的页面导航&#xff0c;这个过程中可以学习到如果组合各种视图&#xff0c;并让它们适配不同的设备尺寸和设备方向。 下载起步项目并跟着本篇教程一步步实践&a…

【C语言训练题库】扫雷->简单小游戏!

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 目录 1. 题目 2. 解析 3. 代码 4. 小结 1. 题目 小sun上课的时候非常喜欢玩扫雷。他现小sun有一个初始的雷矩阵&#xff0c;他希望你帮他生成一个扫雷矩阵。 扫雷…

Vue3_对接腾讯云COS_大文件分片上传和下载

目录 一、腾讯云后台配置 二、安装SDK 1.script 引入方式 2.webpack 引入方式 三、文件上传 1.new COS 实例 2.上传文件 四、文件下载 腾讯云官方文档&#xff1a; 腾讯云官方文档https://cloud.tencent.com/document/product/436/11459 一、腾讯云后台配置 1.登录 对…

Codeforces Round 951 (Div. 2) F. Kostyanych‘s Theorem(思维题 交互好题)

题目 交互题&#xff0c;n&#xff08;n<1e5&#xff09;个点的完全图&#xff0c;无向的&#xff0c;初始恰好删了n-2条边 每次询问可以输入一个d&#xff1a;? d 交互器会输出一个当前度>d的点v&#xff0c; 如果有多个这样的点&#xff0c;输出度最小的&#xff…

【CS.CN】优化HTTP传输:揭示Transfer-Encoding: chunked的奥秘与应用

文章目录 0 序言0.1 由来0.2 使用场景 1 Transfer-Encoding: chunked的机制2 语法 && 通过设置Transfer-Encoding: chunked优化性能3 总结References 0 序言 0.1 由来 Transfer-Encoding头部字段在HTTP/1.1中被引入&#xff0c;用于指示数据传输过程中使用的编码方式…

InternLM-XComposer2-4KHD开拓性的4K高清视觉-语言模型

大型视觉-语言模型&#xff08;LVLM&#xff09;在图像字幕和视觉问答&#xff08;VQA&#xff09;等任务中表现出色。然而&#xff0c;受限于分辨率&#xff0c;这些模型在处理包含细微视觉内容的图像时面临挑战。 分辨率的限制严重阻碍了模型处理含有丰富细节的图像的能力。…

网络空间安全数学基础·多项式环与有限域

5.1 多项式环&#xff08;掌握&#xff09; 5.2 多项式剩余类环&#xff08;理解&#xff09; 5.3 有限域&#xff08;熟练&#xff09; 5.1 多项式环 定义&#xff1a;设F是一个域&#xff0c;称是F上的一元多项式&#xff0e; 首项&#xff1a;如果an≠0&#xff0c;则称 a…

【Python】认识 Python

一、计算机基础概念 1、什么是计算机 很多老一辈的人&#xff0c;管下面这个叫做计算机。然而&#xff0c;它只是 “计算器”&#xff0c;和计算机是有很大区别的。 现在我们所说的计算机&#xff0c;不光能进行算术运算&#xff0c;还能进行逻辑判断、数据存储、网络通信等…

Qt之QGraphicsView —— 笔记3:矩形图元连接(附完整源码)

效果 完整源码 注意:在ui文件中拖入一个QGraphicsView类窗口控件,然后用MyGraphicsView提升该类。 main.cpp #include "widget.h" #include <QApplication>int main(

【背包-BM70 兑换零钱(一)】

题目 BM70 兑换零钱(一) 描述 给定数组arr&#xff0c;arr中所有的值都为正整数且不重复。每个值代表一种面值的货币&#xff0c;每种面值的货币可以使用任意张&#xff0c;再给定一个aim&#xff0c;代表要找的钱数&#xff0c;求组成aim的最少货币数。 如果无解&#xff0c;…

《数据结构》

简答题 一、设散列函数H(key)=key MOD 11,用线性探测再散列法解决冲突。对关键字序列{ 13,28,72,5,16,18,7,11,24 }在地址空间为0-10的散列区中建散列表,画出此表,并求等概率情况下查找成功时的平均查找长度。 散列函数为 H(key)=key MOD 11,将关键字序列 {13,28,…

width: 100%和 width: 100vw这两种写法有什么区别

width: 100%; 和 width: 100vw; 是两种不同的 CSS 写法&#xff0c;它们在实际应用中会有不同的效果。以下是这两种写法的主要区别&#xff1a; width: 100%; 定义&#xff1a;将元素的宽度设置为其包含块&#xff08;通常是父元素&#xff09;宽度的 100%。效果&#xff1a;元…

计算机毕业设计hadoop+spark+hive知识图谱股票推荐系统 股票数据分析可视化大屏 股票基金爬虫 股票基金大数据 机器学习 大数据毕业设计

哈 尔 滨 理 工 大 学 毕业设计中期检查报告 题 目&#xff1a;基于Spark的股票大数据分析及可视化系统 院 系&#xff1a; 计算机科学与技术学院 数据科学与大数据技术 姓 名&#xff1a; 鲍方博 指导教师&…