C++蓝桥杯比赛历年真题--第14届蓝桥杯省赛真题(含答案解析)
toyiye 2024-09-14 13:27 3 浏览 0 评论
C++蓝桥杯比赛历年真题--第14届蓝桥杯省赛真题(含答案解析和代码)
一、选择题
答案:A
解析: C++中 bool 类型与 char 类型一样,都需要1 byte。一些其他类型的占用字节数:short:2 byte,int:4byte,long long:8 byte,double:8byte,故答案为A。
答案:C
解析:
A中结构体中可以定义成员变量,也可以定义只有该结构体类型变量可调用的成员函数;
B中所谓结构体的继承特性,指的是在一个已经定义好的旧结构体的基础上,创建一个新结构体,并且新结构体可以复用旧结构体的成员和函数;
C正确,D中构造函数可以在创建结构体变量时,按照函数预设的构造规则将对应成员变量赋值,并执行其他操作。构造函数在创建结构体类型的对象时自动执行,因此无法由用户主动调用,也没有返回值,故答案为C。
答案:C
解析:由等比数列的求和可知:一个高度为 h的满二叉树含有 2h-1 个结点。
本题的 62 个结点,相当于高度为6 的满二叉树的 2^6 -1=63个结点中,再去掉最底层最右端的一个结点,故答案为C。
答案:C
解析:数组的索引是从0开始的,所以如果一个数组有n个元素,第一个元素的索引是0,最后一个元素的索引是n-1,而不是数组的长度故答案为C。
答案:A
解析:代码功能是计算一个递归函数 f(k) 的值,其中 f(1) = 3,且当 k > 1 时,f(k) = 2*f(k-1) + 1。对于 n = 6 的情况,计算过程如下:
f(6) = 2*f(5) + 1
f(5) = 2*f(4) + 1
f(4) = 2*f(3) + 1
f(3) = 2*f(2) + 1
f(2) = 2*f(1) + 1
已知 f(1) = 3
反向代入已知值得到:
f(2) = 2*3 + 1 = 7
f(3) = 2*7 + 1 = 15
f(4) = 2*15 + 1 = 31
f(5) = 2*31 + 1 = 63
f(6) = 2*63 + 1 = 127
所以,修正并执行代码后,输出的结果是 127,故答案为A。
二、编程题
【参考程序】
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
cout<<(n-n/10);
return 0;
}
【参考程序】
#include <bits/stdc++.h>
using namespace std;
bool is_T(int n){
int t=n,s=0;
for(int i=1;i<=4;i++){
s+=pow(t%10,4);
t/=10;
}
if(s==n) return true;
else return false;
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=n;i<=m;i++)
if (is_T(i)) cout<<i<<" ";
return 0;
}
【参考程序】
#include <bits/stdc++.h>
using namespace std;
// 声明常量及变量
const int N = 1e7 + 5; // N表示可能的质数的上限
int primes[N], p; // primes数组保存已知的质数列表,p表示质数个数
bool sign[N]; // sign数组用来标记某个数是否是质数
int s[N]; // s数组用来记录每个数的最大质因子个数
// 埃氏筛法初始化质数表
void init_Primes(int n) {
for (int i = 2; i <= n; i++) {
if (!sign[i]) primes[p++] = i; // i是质数,加入质数表中
for (int j = 0; primes[j] <= n / i; j++) {
sign[primes[j] * i] = true; // 将i和质数表中所有不大于n/i的数的积标记为合数
if (i % primes[j] == 0) break; // 如果primes[j]是i的因子,则退出循环
}
}
}
// 计算数n的最大质因子个数
int tj_(int n) {
int tj = 0; // tj表示n的最大质因子个数
for (int i = 0; i < p; i++) { // 枚举质数表中所有质数
while (n % primes[i] == 0) { // 如果当前质数是n的因子
tj++; // 更新最大质因子个数
n /= primes[i]; // 去掉该质因子
if (n == 1) return tj; // 如果n变为了1,则说明所有质因子均被枚举完毕
}
}
}
int main() {
int n, m;
cin >> n >> m;
init_Primes(m); // 初始化质数表
int res = 0; // res表示区间内最大质因子个数
for (int i = n; i <= m; i++) { // 枚举每个数,计算其最大质因子个数,更新res
res = max(res, tj_(i));
}
cout << res; // 输出结果
return 0;
}
【参考程序】
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=1e6+5;
long long n,a[N];
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
long long ans=0,min_n=0; // ans 记录最大的面积,min_n 记录当前区间中的最小值
for(int i=1;i<=n;i++){
min_n=N;
for(int j=i;j<=n;j++){
min_n=min(min_n,a[j]); // 更新当前区间中的最小值
ans=max(ans,(j-i+1)*min_n); // 根据更新后的最小值来计算当前区间的面积,并记录最大值
}
}
cout<<ans; // 输出最大面积
return 0;
}
【参考程序1】
#include <bits/stdc++.h>
using namespace std;
int n,ans;
map<int,int> mp; // 定义map容器mp用于计数,map容器会根据键自动进行排序
int main()
{
cin>>n; // 数的个数
for(int i=1,x;i<=n;i++){
cin>>x;mp[x]++; // 如果x已经存在,则val+1;否则新建一个键值对(x,1)
}
// 当mp中至少存在三个不同的数字时
while(mp.size()>2){
if(ans%2==0){ // 如果ans为偶数
auto t=mp.begin(); // 获取mp中第一个键值对的迭代器
(t->second)--; // 将出现次数最少的数x减去1
(next(t)->second)++; // 将出现次数比x大的数y加上1
if(!t->second) mp.erase(t); // 如果x的出现次数为0,则从mp中删除该键值对
}else{ // 如果ans为奇数
auto t=prev(mp.end()); // 获取mp中最后一个键值对的迭代器
(t->second)--; // 将出现次数最多的数x减去1
(prev(t)->second)++; // 将出现次数比x小的数y加上1
if(!t->second) mp.erase(t); // 如果x的出现次数为0,则从mp中删除该键值对
}
ans++;
}
int max_num = prev(mp.end())->first;
int min_num = mp.begin()->first;
cout<<ans<<" "<<min_num<<" "<<max_num<<endl;
return 0;
}
【参考程序2】
#include<bits/stdc++.h>
using namespace std;
const int N = 500005;
int n, pail[N],cnt;
list<int> ls;
int main(){
scanf("%d", &n);
for(int i = 1,x; i <= n; ++i) {
cin>>x;pail[x]++;
}
for(int i=N-1;i>=1;i--)
if(pail[i]) ls.push_back(i);
while(ls.size()>2){
auto it_f=ls.begin();
auto it_s=ls.begin();it_s++;
int id_f=*it_f,id_s=*it_s;
pail[id_f]--;
if(!pail[id_f])ls.pop_front();
pail[id_s]++;
cnt++;
if(ls.size()<=2) break;
it_f=ls.end();it_f--;it_f--;
it_s=ls.end();it_s--;
id_f=*it_f,id_s=*it_s;
pail[id_s]--;
if(!pail[id_s])ls.pop_back();
pail[id_f]++;
cnt++;
}
auto it_f=ls.begin();
auto it_s=ls.begin();it_s++;
if(ls.size()==1) cout<<cnt<<" "<<*it_f<<" "<<*it_f;
else cout<<cnt<<" "<<*it_s<<" "<<*it_f;
return 0;
}
【参考程序】
//树图+深搜+动规
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int n, root;//n储存所有部门的数量 root储存根节点
int a[N];// a数组表示每个节点的权值
int f[N][2]; // f[i][0/1]表示不选/选i节点时的最大价值
vector<int> G[N]; // 存储树的图结构
void dfs(int u){
f[u][1] = a[u]; // 初始化选u节点的最大价值为它本身的权值
for (int v : G[u]){//相当于for(int v=0;v<G[u].size();v++)
dfs(v); // 遍历v节点
f[u][1] += f[v][0]; // 如果选择了u节点,则不能选择v节点,所以累加 f[v][0]
f[u][0] += max(f[v][0],f[v][1]); // 如果不选择u节点,则可以选择v节点
// 所以取 f[v][0] 和 f[v][1] 的较大值累加起来
}
}
int main()
{
cin >> n;
for (int i = 1, f, s; i <= n; i++){
cin >> f >> s >> a[s]; // 输入父节点、子节点和子节点权值
if (f) G[f].push_back(s); // 如果有父亲节点则建立G[f] -> [s]的边
else root = s; // 否则当前节点为根节点
}
dfs(root);
cout << max(f[root][0],f[root][1]);
return 0;
}
————————————————
相关推荐
- 为何越来越多的编程语言使用JSON(为什么编程)
-
JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...
- 何时在数据库中使用 JSON(数据库用json格式存储)
-
在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...
- MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)
-
前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...
- JSON对象花样进阶(json格式对象)
-
一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...
- 深入理解 JSON 和 Form-data(json和formdata提交区别)
-
在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...
- JSON 语法(json 语法 priority)
-
JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...
- JSON语法详解(json的语法规则)
-
JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...
- MySQL JSON数据类型操作(mysql的json)
-
概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...
- JSON的数据模式(json数据格式示例)
-
像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...
- 前端学习——JSON格式详解(后端json格式)
-
JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...
- 什么是 JSON:详解 JSON 及其优势(什么叫json)
-
现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...
- PostgreSQL JSON 类型:处理结构化数据
-
PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...
- JavaScript:JSON、三种包装类(javascript 包)
-
JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...
- Python数据分析 只要1分钟 教你玩转JSON 全程干货
-
Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...
- 比较一下JSON与XML两种数据格式?(json和xml哪个好)
-
JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- r语言矩阵 (127)
- browsererror (114)
- exportexcel (119)
- cv2.bitwise_not (137)
- dump命令 (128)
- es6concat (126)
- heapify (127)
- java.security.egd (130)
- javax.annotation (117)
- jsstringsplit (117)
- js数字 (115)
- maven编译 (132)
- mysqlleft (128)
- nodejsbuffer (149)
- org.apache.commons.httpclient (126)
- org.jsoup (141)
- org.springframework.web (128)
- robotframework-ride (115)
- setnocounton (141)
- socket.gethostbyname (122)
- sqlmid (121)
- time.strptime (133)
- vscode格式化 (125)
- win32con (129)
- window.localstorage (126)