2021年蓝桥杯第十二届CC++大学B组真题及代码

news2025/3/25 22:13:37

目录

1A:空间(填空5分_单位转换)

2B:卡片(填空5分_模拟)

3C:直线(填空10分_数学+排序)

4D:货物摆放(填空10分_质因数)

5E:路径(填空15分_最短路)

6F:时间显示(编程题15分)

解析代码(模拟)

7G:砝码称重(编程题20分)

解析代码(01背包dp)

8H:杨辉三角形(编程题20分)

解析代码(找规律)

9I:双向排序(编程题25分)(待续)

10J:括号序列(编程题25分)(待续)


1A:空间(填空5分_单位转换)

答案:67108864


#include <iostream>
using namespace std;

int main()
{
	// A题:256MB存多少个32位二进制整数(4bit)
	// 256MB = 256 * 1024 KB = 256 * 1024 * 1024 B = 256 * 1024 * 1024 * 8 bit
	cout << 256 * 1024 * 1024 * 8 / 32 << endl;
	cout << 256 * 1024 * 1024 / 4 << endl;
	return 0;
}
// 答案67108864

2B:卡片(填空5分_模拟)

答案:3181



#include <iostream>
#include <vector>
using namespace std;

vector<int> arr(10, 2021);

bool chick(int x)
{
	while (x)
	{
		int tmp = x % 10;
		if (--arr[tmp] < 0)
			return false;
		x /= 10;
	}
	return true;
}

int main()
{
	for (int i = 1; ; ++i)
	{
		if (!chick(i)) // 如果拼不出来
		{
			cout << i - 1 << endl;
			return 0;
		}
	}
	return 0;
}
// 答案3181

3C:直线(填空10分_数学+排序)

答案:40257


// C:直线
// 大致思路:依次枚举各个点,每两个点生成对应的斜率和截距。最后看有多少个不同的组合,即有多少条不同的直线
// 注意事项:类型为double的两个数值a和b,即使数值相同,对应的double值也有可能不同,
// 故在cpp中比较两个double值应判断其abs之差是否在很小的一个范围之内,例如1e-8
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
const int N = 200000; // 直线的最大数
int n = 0;
struct Line
{
    double k;
    double b;
    // 结构体内嵌排序函数
    // 直接写比较函数是裸的len表示当前的值,如果len<a.len,那么就是从小到大排序。
    // 括号中的const表示参数a对象不会被修改,最后的const表明调用函数对象不会被修改
    // sort默认为从小到大排序,优先队列默认为从大到小。
    bool operator < (const Line& t) const  //重载<操作符。可以对两个node使用<操作符进行比较
    {
        if (k != t.k)  // k不同的话,k小的在前
            return k < t.k;
        return b < t.b; // k相同的话,b小的在前
    }
}l[N];

int main()
{
    //枚举一下所有的点对
    for (int x1 = 0; x1 < 20; ++x1)
    {
        for (int y1 = 0; y1 < 21; ++y1)
        {
            for (int x2 = 0; x2 < 20; ++x2)
            {
                for (int y2 = 0; y2 < 21; ++y2)
                {
                    if (x1 != x2)//避免斜率不存在的情况,总共20条竖线
                    {
                        double k = (double)(y2 - y1) / (x2 - x1);
                        double b = y2 - k * x2;
                        l[n++] = { k,b }; // 存数对
                    }
                }
            }
        }
    }
    sort(l, l + n);
    int res = 1;
    for (int i = 1; i < n; ++i) // 找出截率和斜率不等的就是不同数
    {
        if (fabs(l[i].k - l[i - 1].k) > 1e-8 || fabs(l[i].b - l[i - 1].b) > 1e-8)
            ++res;
    }
    cout << res + 20 << endl; // 加上不存在斜率的20条竖线
    return 0;
}
// 答案40257

4D:货物摆放(填空10分_质因数)


        思路:先获得2021041820210418所有质因数(所以质因数也就一百多个),再通过质因数去组合从而获得所有的正约数,最后只需在所有的正约数找3个乘积为2021041820210418就行。

答案:2430

#include <iostream>
#include <vector>

using namespace std;
#define int long long
#define endl '\n'
// n比较大,会爆因子

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	int n = 2021041820210418;
	vector<int> v;
	for (int i = 1; i * i <= n; i++) // 得到n的所有约数
	{
		if (n % i == 0)
		{
			v.push_back(i);
			if (n / i != i)
				v.push_back(n / i);
		}
	}
	//cout << v.size() << endl;
	int res = 0;
	for (auto& a : v) //枚举一下a b c
	{
		for (auto& b : v)
		{
			for (auto& c : v)
			{
				if (a * b * c == n)
					++res;
			}
		}
	}
	cout << res << endl;
	return 0;
}
// 答案:2430

5E:路径(填空15分_最短路)

求最短路的问题,答案是1026837


6F:时间显示(编程题15分)


解析代码(模拟)

需要注意的是1秒等于1000毫秒,不需要输出毫秒,一开始先除等1000。

#include <iostream>
using namespace std;
#define endl '\n'

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	long long n;
	cin >> n;
	//1s=1000ms,先去除毫秒
	n /= 1000;
	// 每一天秒数24*60*60==86400s,取得到最后一天的秒数
	n %= (24 * 60 * 60);
	int h = n / 3600; // 小时
	n %= 3600; // 得到最后一天除了时以外的秒数
	int m = n / 60; //分钟
	int s = n % 60; //秒
	printf("%02d:%02d:%02d\n", h, m, s);
	return 0;
}
// 46800999
// 1618708103123

7G:砝码称重(编程题20分)


解析代码(01背包dp)

#include <bits/stdc++.h>
#include <iostream>

using namespace std;
#define endl '\n'
#define int long long

// -m<=j<=m
const int N = 110, M = 200010, OFFSET = M / 2;

int n, sum; // n代表总选择数,sum代表所有砝码总重量
int w[N]; // 存重量的数组
bool dp[N][M];
// dp:状态表示f(i,j)-->集合:只从前i个物品中选,且总重量为j的所有方案的集合;属性:是否为true
// 状态计算:不选wi -> dp(i-1,j))、选+wi -> dp(i-1,j-wi)、选-wi ->dp(i-1,j+wi)
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n;
	for (int i = 1; i <= n; ++i)
	{
		cin >> w[i];
		sum += w[i];
	}
	dp[0][OFFSET] = true; // j可能是负数,都要加一个偏移量(足够大的数)
	for (int i = 1; i <= n; ++i)
	{
		for (int j = -sum; j <= sum; ++j) // -sum到sum +sum就从0开始,dp[0][0]初始化为true
		{
			dp[i][j + OFFSET] = dp[i - 1][j + OFFSET];
			if (j - w[i] >= -sum)
				dp[i][j + OFFSET] |= dp[i - 1][j - w[i] + OFFSET];
			if (j + w[i] <= sum)
				dp[i][j + OFFSET] |= dp[i - 1][j + w[i] + OFFSET];
		}
	}
	int res = 0;
	for (int j = 1; j <= sum; ++j)
	{
		if (dp[n][j + OFFSET] == true)
			++res;
	}
	cout << res << endl;
	return 0;
}
/*
3
1 4 6
*/

8H:杨辉三角形(编程题20分)


解析代码(找规律)

#include <iostream>
#include <cstring>
#define endl '\n'
using namespace std;
const int mod = 1000000007;
const int M = 110;
int dp[M * 2][M][M];

signed main()
{
	memset(dp, 0, sizeof dp); // 0 表示花 1 表示店
	dp[0][0][2] = 1;
	int n, m;
	cin >> n >> m;
	for (int i = 0; i <= n; ++i)
	{
		for (int j = 0; j <= m; ++j)
		{
			for (int k = 0; k <= 101; ++k)
			{
				if (i == 0 && j == 0)
					continue;
				if (i > 0 && !(k & 1)) // 店
					dp[i][j][k] += dp[i - 1][j][k / 2];
				if (j > 0) // 花
					dp[i][j][k] += dp[i][j - 1][k + 1];
				dp[i][j][k] %= mod;
			}
		}
	}
	cout << dp[n][m - 1][1];
}

9I:双向排序(编程题25分)(待续)


10J:括号序列(编程题25分)(待续)

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

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

相关文章

秒杀业务优化之从分布式锁到基于消息队列的异步秒杀

一、业务场景介绍 优惠券、门票等限时抢购常常出现在各类应用中&#xff0c;这样的业务一般为了引流宣传而降低利润&#xff0c;所以一旦出现问题将造成较大损失&#xff0c;那么在业务中就要求我们对这类型商品严格限时、限量、每位用户限一次、准确无误的创建订单&#xff0c…

纯vue手写流程组件

前言 网上有很多的vue的流程组件&#xff0c;但是本人不喜欢很多冗余的代码&#xff0c;喜欢动手敲代码&#xff1b;刚开始写的时候&#xff0c;确实没法下笔&#xff0c;最后一层一层剥离&#xff0c;总算实现了&#xff1b;大家可以参考我写的代码&#xff0c;可以拿过去定制…

WPS宏开发手册——使用、工程、模块介绍

目录 系列文章前言1、开始1.1、宏编辑器使用步骤1.2、工程1.3、工程 系列文章 使用、工程、模块介绍 JSA语法 第三篇练习练习题&#xff0c;持续更新中… 前言 如果你是开发人员&#xff0c;那么wps宏开发对你来说手拿把切。反之还挺吃力&#xff0c;需要嘻嘻&#xf…

django入门教程之request和reponse【二】

接上节&#xff1a;入门【一】 再创建一个orders子应用&#xff0c;python manager.py startapp orders&#xff0c;orders目录中新建一个urls.py文件。结构如图&#xff1a; 通过上节课&#xff0c;我们知道在views.py文件中编写函数时&#xff0c;有一个默认入参request&…

RAG优化:python从零实现[吃一堑长一智]循环反馈Feedback

本文将介绍一种有反馈循环机制的RAG系统,让当AI学会"吃一堑长一智",给传统RAG装了个"后悔"系统,让AI能记住哪些回答被用户点赞/拍砖,从此告别金鱼记忆: 每次回答都像在玩roguelike:失败结局会强化下次冒险悄悄把优质问答变成新知识卡牌,实现"以…

【Linux】VMware17 安装 Ubuntu24.04 虚拟机

目录 安装教程 一、下载 Ubuntu 桌面版iso映像 二、安装 VMware 三、安装 Ubuntu 桌面版 VMware 创建虚拟机 挂载 Ubuntu ISO 安装 Ubuntu 系统 安装教程 一、下载 Ubuntu 桌面版iso映像 链接来自 清华大学开源软件镜像站 ISO文件地址&#xff1a;ubuntu-24.04.2-des…

WPS宏开发手册——JSA语法

目录 系列文章2、JSA语法2.1、打印输出2.2、注释2.3、变量2.4、数据类型2.5、函数2.6、运算符2.7、比较2.8、if else条件语句2.9、for循环2.10、Math对象&#xff08;数字常用方法&#xff09;2.11、字符串常用方法2.12、数组常用方法 系列文章 使用、工程、模块介绍 JSA语…

word中指定页面开始添加页码

第一步&#xff1a; 插入页码 第二步&#xff1a; 把光标放到指定起始页码处 第三步&#xff1a; 取消链接到前一节 此时关掉页脚先添加分节符 添加完分节符后恢复点击 第四步&#xff1a; 设置页码格式&#xff0c;从1开始 第五步&#xff1a; 删掉不要的页码&#xff0c…

Python实现deepseek接口的调用

简介&#xff1a;DeepSeek 是一个强大的大语言模型&#xff0c;提供 API 接口供开发者调用。在 Python 中&#xff0c;可以使用 requests 或 httpx 库向 DeepSeek API 发送请求&#xff0c;实现文本生成、代码补全&#xff0c;知识问答等功能。本文将介绍如何在 Python 中调用 …

文档处理控件Aspose.Words 教程:.NET版中增强的 AI 文档摘要功能

Aspose.Words是一个功能强大的 Word 文档处理库。它可以帮助开发人员自动编辑、转换和处理文档。 自 24.11 版以来&#xff0c;Aspose.Words for .NET 提供了 AI 驱动的文档摘要功能&#xff0c;使用户能够从冗长的文本中快速提取关键见解。在 25.2 版中&#xff0c;我们通过使…

19,C++——11

目录 一、 C11简介 二、 新增的列表初始化 三、 新增的STL容器 四、 简化声明 1&#xff0c;auto 2&#xff0c;decltype 3&#xff0c;nullptr 五、右值引用 1&#xff0c;左值引用和右值引用 2&#xff0c;两种引用的比较 3&#xff0c;左值引用的使用场景 4&…

风尚云网|前端|前后端分离架构深度剖析:技术革新还是过度设计?

前后端分离架构深度剖析&#xff1a;技术革新还是过度设计&#xff1f; 作者&#xff1a;风尚云网 在数字化转型浪潮中&#xff0c;前后端分离架构已成为现代Web开发的主流模式。但这项技术真的是银弹吗&#xff1f;本文将从工程实践角度&#xff0c;剖析其优势与潜在风险&am…

CMS网站模板设计与用户定制化实战评测

内容概要 在数字化转型背景下&#xff0c;CMS平台作为企业内容管理的核心载体&#xff0c;其模板架构的灵活性与用户定制能力直接影响运营效率。通过对WordPress、Baklib等主流系统的技术解构发现&#xff0c;模块化设计理念已成为行业基准——WordPress依托超过6万款主题库实…

搭建个人博客教程(Hexo)

如何快速搭建一套本地的博客系统呢&#xff1f;这里有一套gitNode.jsHexo的部署方案来进行解决。 安装git Git 是一款免费开源的分布式版本控制系统&#xff0c;由 Linus Torvalds 于 2005 年为 Linux 内核开发设计。它通过本地仓库和远程仓库实现代码管理&#xff0c;支持分支…

Docker 可视化工具 Portainer

Docker 可视化工具 Portainer安装 官方安装地址&#xff1a;https://docs.portainer.io/start/install-ce/server/docker/wsl 一&#xff0c;首先&#xff0c;创建 Portainer Server 用来存储数据库的卷&#xff1a; docker volume create portainer_data二&#xff0c;然后…

数据库基础知识点(系列二)

1&#xff0e;关系数据模型由哪三个要素组成。 答&#xff1a;关系数据模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。 2&#xff0e;简述关系的性质。&#xff08;关系就是一张二维表格&#xff0c;但不是任何二维表都叫关系&#xff09; 答&#xff1a;(1…

如何进行灌区闸门自动化改造-闸门远程控制系统建设

改造背景 操作效率低‌&#xff1a;人工启闭耗时耗力&#xff0c;单次操作需2-3人配合&#xff0c;耗时长。 ‌水资源浪费‌&#xff1a;依赖经验估算放水量&#xff0c;易导致漫灌或供水不足。 ‌管理滞后‌&#xff1a;无法实时监控水位、流量&#xff0c;故障响应延迟。 …

【算法笔记】图论基础(二):最短路、判环、二分图

目录 最短路松弛操作Dijkstra朴素Dijkstra时间复杂度算法过程例题 堆优化Dijkstra时间按复杂度算法过程例题 bellman-ford时间复杂度为什么dijkstra不能处理负权边&#xff1f;dijkstra的三个步骤&#xff1a;反例失效的原因 算法过程例题 spfa时间复杂度算法过程例题spfa求最短…

EMS小车技术特点与优势:高效灵活的自动化输送解决方案

北成新控伺服技术丨EMS小车调试视频 EMS小车是一种基于单轨运行的电动输送系统&#xff0c;通过电力驱动实现物料的高效搬运和输送&#xff0c;具有高效灵活、节能环保、多功能集成、行业适配性强等特性&#xff0c;广泛应用于汽车制造、工程机械、家电生产、仓储物流等行业自动…

uniapp运行到支付宝开发者工具

使用uniapp编写专有钉钉和浙政钉出现的样式问题 在支付宝开发者工具中启用2.0构建的时候&#xff0c;在开发工具中页面样式正常 但是在真机调试和线上的时候不正常 页面没问题&#xff0c;所有组件样式丢失 解决 在manifest.json mp-alipay中加入 "styleIsolation&qu…