蓝桥杯第十届(2019)B组省赛1-9题练手源码

2023-11-01

1、组队(枚举)

【题目】
作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员,组成球队的首发阵容。
每位球员担任 1 号位至 5 号位时的评分如下表所示。请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多少?
在这里插入图片描述
【题解】
过于简单,直接爆破就不贴源码了

2、年号字符串

【题目】
字母 A 对应数字 1,B 对应 2,以此类推,用 Z 对应 26。对于 27 以上的数字,用两位或更长位的字符串来对应,例如 AA 对应 27,AB 对 应 28,AZ 对应 52,LQ 对应 329。 请问 2019 对应的字符串是什么?
【题解】

#include <iostream>
#include <vector>
#include <list>
#include <numeric>
#include <string>
using std::endl;
using std::cout;

int main()
{    
	using std::string;    
	char num[27] = {0, 'A'};    
	for(int i = 2; i < 27; i++) num[i] = num[i-1] + 1;    
	string ans = "";    
	int year = 2019;    
	while(year) { int t = year % 26; ans = num[t] + ans; year /= 26; }    
	cout << ans << endl;       
	return 0;
}

3、数列

【题目】
给定数列 1, 1, 1, 3, 5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和。求第 20190324 项的最后 4 位数字。
【题解】

#include <iostream>
using std::cout;
using std::endl;

const int mod = 10000;
int num[20190324] = {1, 1, 1};
int main()
{    
	for(int i = 3; i < 20190324; i++)   
		num[i] = (num[i-3] + num[i-2] + num[i-1]) % mod;   
	cout << num[20190323] << endl;    
	return 0;
}

4、数值分解

【题目】
把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,一共有多少种不同的分解方法?注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和 1001+1000+18 被视为同一种。
【题解】

#include <iostream>
#include <vector>
#include <list>
#include <numeric>
#include <string>
using std::endl;
using std::cout;

bool CheckNum(int num)
{    
	while(num)    
	{        
		if(num % 10 == 2 || num % 10 == 4)            
			return false;        
		num /= 10;    
	}    
	return true;
}
int main()
{    
	int ang = 0;    
	for(int i = 1; i < 2019; i++)    
	{        
		if(!CheckNum(i))            
			continue;        
		for(int j = i+1; j < 2019 - i; j++)        
		{            
			if(!CheckNum(j))                
				continue;            
			for(int k = j+1; k < 2019 - j; k++)            
			{                
				if(!CheckNum(k))                    
					continue;                
				if(2019 == i+j+k)                    
					ang++;            
			}        
		}    
	}    
	cout << ang << endl;    
	return 0;
}

5、迷宫求解

【题目】
下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可 以通行的地方。
010000
000100
001001
110000
迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这 个它的上、下、左、右四个方向之一。 对于上面的迷宫,从入口开始,可以按DRRURRDDDR 的顺序通过迷宫,一共 10 步。 其中 D、U、L、R 分别表示向下、向上、向左、向右走。对于下面这个更复杂的迷宫(30 行 50 列), 请找出一种通过迷宫的方式, 其使用的步数最少,在步数最少的前提下,请找出字典序最小的一个作为答案。 请注意在字典序中D<L<R<U。
测试迷宫:
在这里插入图片描述
BFS(宽度优先搜索算法)
【题解】

#include <iostream>
#include <vector>
#include <list>
#include <numeric>
#include <string>
#include <stdio.h>
#include <queue>
using std::endl;
using std::cout;
using std::queue;
using std::string;

const int N = 30;
const int M = 50;
char map[N][M];
int dir[4][2] = {{1, 0}, {0, -1}, {0, 1}, {-1, 0}}; // D<L<R<U
char ch[4] = {'D', 'L', 'R', 'U'};
int vis[N][M] = {0};    // 记录路径
class Point
{
public:    
	int x;    
	int y;    
	string road;    
	Point(int inX, int inY)    
	{        
		this->x = inX;        
		this->y = inY;    
	}
};
void BFS()
{    
	queue<Point> quQ;    
	Point pBegin(0, 0);    
	pBegin.road = "";    
	quQ.push(pBegin);    
	vis[0][0] = 1;    
	while(!quQ.empty())    
	{        
		Point t = quQ.front();        
		quQ.pop();        
		if(t.x == N-1 && t.y == M-1)        
		{            
			cout << t.road << endl;            
			break;        
		}        
		for(int i = 0; i < 4; i++)        
		{            
			int dx = t.x + dir[i][0];            
			int dy = t.y + dir[i][1];            
			if(dx >= 0 && dx < N && dy >= 0 && dy < M)            
			{                
				if(map[dx][dy] == '0' && !vis[dx][dy])  // 能走但没走  
				{                    
					Point tt(dx, dy);                    
					tt.road = t.road + ch[i];   // 记录路径 
					quQ.push(tt);                    
					vis[dx][dy] = 1;                
				}            
			}        
		}    
	}    
	cout << pBegin.road << endl;
}
int main()
{    
	cout << "input map:" << endl;    
	for(int i = 0; i < N; i++)    
	{        
		for(int j = 0; j < M; j++)            
		scanf("%s", &map[i][j]);        
		getchar();    
	}    
	BFS();    
	return 0;
}

6、数字求和

【题目】
小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中 这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。 请问,在 1 到 n 中,所有这样的数的和是多少?
【题解】

#include <iostream>
#include <vector>
#include <list>
#include <numeric>
#include <string>
#include <queue>
#include <string.h>
using std::endl;
using std::cout;

bool check(int n)
{    
	char* str = new char[20];    
	itoa(n, str, 10);    
	// 方法一:    
	// std::string s = str;    
	// if(s.find("2") == std::string::npos && s.find("0") == std::string::npos \
	//	&& s.find("1") == std::string::npos && s.find("9") == std::string::npos)    
	//     return false;    
	// else    
	//     return true;
    	// 方法二:    
    	if(strstr(str, "2") == NULL && strstr(str, "0") == NULL \
    		&& strstr(str, "1") == NULL && strstr(str, "9") == NULL)        
    		return false;    
    	else return true;
    	// 方法三:    
    	// for(int i = 0; str[i]; i++) { if(str[i] == '2' || str[i] == '0' || str[i] == '1' || str[i] == '9') return true; }     
    	// return false;
}
int main()
{    
	using std::cin;    
	int n, ans = 0;    
	cin >> n;    
	for(int i = 1; i <= n; i++) { if(check(i)) ans += i; }    
	cout << ans << endl;    
	return 0;
}

7、完全二叉树

【题目】
给定一棵包含 N 个节点的完全二叉树,树上每个节点都有一个权值,按从上到下、从左到右的顺序依次是 A1, A2, ··· AN,如下图所示:
A1
/ \
A2 A3
/ \ / \
A4 A5 A6 A7
现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。
注:根的深度是1。
【解题思路】
完全二叉树的深度是log2(n+1)向上取整,计算每个深度上的权值和进行判断即可。
【题解】

#include <iostream>
#include <vector>
#include <list>
#include <numeric>
#include <string>
#include <stdio.h>
#include <queue>
#include <string.h>
#include <cmath>

using std::endl;
using std::cout;

#define INF 0x3f3f3f3f  // 无穷大
const int N = 100005;
int num[N] = {0};
int main()
{    
	using std::cin;    
	int n, ans = 1, k = 0, max = -INF;    
	cin >> n;    
	for(int i = 0; i < n; i++) cin >> num[i];    
	for(int i = 1; i <= ceil(log(n+1)/log(2)); i++) // ceil向上取整    
	{        
		int sum = 0;        
		for(int j = 0; j < pow(2, i-1); j++) sum += num[k++];        
		if(sum > max) { max = sum; ans = i; }    
	}    
	cout << ans << endl;    
	return 0;
}

8、等差数列

【题目】
数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一 部分的数列,只记得其中 N 个整数。现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有几项?
【解题思路】
先给数列排序,然后逐个求差,将所有的差求个最大公约数得出最大的公差,然后运用公式 n=(an-a1)/d+1,就可以求出项数了。
【题解】

#include <iostream>
#include <vector>
#include <list>
#include <numeric>
#include <string>
#include <stdio.h>
#include <queue>
#include <string.h>
#include <cmath>
using std::endl;
using std::cout;

int gcd(int a,int b) { if(b == 0) return a; return gcd(b, a % b); }
int main()
{    
	using std::vector;    
	using std::list;    
	using std::cin;    
	int N, num;    
	vector<int> vecNum;    
	list<int> listNum;    
	cin >> N;    
	int d = N;  // 公差初始化    
	for(int i = 0; i < N; i++)  { cin >> num; listNum.push_back(num); }   
	listNum.sort();    
	vecNum.assign(listNum.begin(), listNum.end());    
	int x = vecNum.at(1) - vecNum.at(0);    
	int z;  // 中间值    
	for(int i = 2; i < (int)vecNum.size(); i++)    
	{         
		int y = vecNum.at(i) - vecNum.at(i-1);        
		if(x >= y)  z = gcd(x, y);        
		else    z = gcd(y, x);        
		if(z < d)   d = z;     
	}    
	cout << (vecNum.back() - vecNum.front()) / d + 1 << endl;    
	return 0;
}

9、计算式组合

【题目】
给定 N 个加号、M 个减号以及 N + M + 1 个整数 A1,A2,··· ,AN+M+1,小明想知道在所有由这 N 个加号、M 个减号以及 N + M +1 个整数凑出的合法的后缀表达式中,结果最大的是哪一个?请你输出这个最大的结果。 例如:使用1 2 3 + -,则 “2 + 3 - 1” 这个后缀表达式结果是 4,是最大的。
输入格式:
第一行包含两个整数 N 和 M。 第二行包含 N + M + 1 个整数 A1,A2,···,AN+M+1。
输出格式:
输出一个整数,代表答案。
【解题思路】
按照负号的个数和负数的个数来分类讨论:1、负号个数为0;2、负号个数等于负数个数;3、负号个数小于负数个数;4、负号个数大于负数个数。总结:第一种直接求和,第二种第三种即为求绝对值和,第四种先求和再减去多余负号个数的较小正数。
【题解】

#include <iostream>
#include <vector>
#include <list>
#include <numeric>
#include <string>
#include <stdio.h>
#include <queue>
#include <string.h>
#include <cmath>
using std::endl;
using std::cout;

int main()
{    
	using std::cin;    
	using std::vector;    
	using std::list;    
	int n, m, num;  // n表示减号数量,m表示加号数量    
	vector<long long> vec;    
	list<long long> lst;    
	cin >> n >> m;    
	int x = 0, sum = 0; // x表示负数个数    
	for(int i = 0; i < n + m + 1; i++)     
	{         
		cin >> num;        
		if(num < 0) x++;        
		vec.push_back(num);     
	}    
	if(n == 0)  sum = accumulate(vec.begin(), vec.end(), 0);    
	if(n == x || n < x) 
	{ for(int i = 0; i < (int)vec.size(); i++)  sum += bs(vec.at(i)); } 
	if(n > x)    
	{        
		for(auto vec_iterator = vec.begin(); vec_iterator < vec.end(); vec_iterator++)            
			if(*vec_iterator <= 0) vec.erase(vec_iterator);
		lst.assign(vec.begin(), vec.end());        
		lst.sort();        
		sum = accumulate(lst.begin(), lst.end(), 0);        
		for(int i = 0; i < n - x; i++) { sum -= lst.front()*2; lst.pop_front(); }   
	}    
	cout << sum << endl;    
	return 0;
}

说明:由于是练手代码,所有题解源码未专门做优化处理,仅供参考,谢谢阅读!!!
感谢:3 ~ 9届蓝桥杯比赛原题点击传送

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝桥杯第十届(2019)B组省赛1-9题练手源码 的相关文章

  • 在 XML 中,带问号的节点叫什么?在 C# 中如何添加它们?

    以下是在 InfoPath 中创建的 XML 文件的示例
  • 从服务器下载图像(cUrl,但接受建议)C++

    我试图通过从服务器 网站 下载图像来设置旋转背景图像 并尝试使用curl 来执行此操作 但是在执行此操作方面取得了0 成功 我的代码的 缩短的 版本如下 我没有收到错误 但是 如何 临时 保存该图像以将其显示为背景 是否有图像 类型变量 或
  • std::map find 在 C++ 中不起作用[重复]

    这个问题在这里已经有答案了 我使用以下几行创建了一个哈希映射和一个迭代器 std map
  • 处理器关联组 C#

    我使用的是 72 核的 Windows Server 2016 我看到有两组处理器 我的 net 应用程序将使用一个或其他组 我需要能够强制我的应用程序使用我选择的组 我看到下面的代码示例 但我无法使其工作 我可能传递了错误的变量 我希望应
  • 如何在 ASP.NET MVC 中处理会话数据

    假设我想存储一个名为language id在会议中 我想我也许可以做如下的事情 public class CountryController Controller WebMethod EnableSession true AcceptVer
  • 二叉树和快速排序?

    我有一个家庭作业 内容如下 别生气 担心 我是not请你帮我做作业 编写一个程序 通过使用二分查找的快速排序方法对一组数字进行排序 树 推荐的实现是使用递归算法 这是什么意思 到目前为止 这是我的解释 正如我在下面解释的那样 我认为两者都有
  • 如何在 Google Mock 中使用可选参数来模拟方法?

    如何使用可选参数模拟方法谷歌模拟 例如 class A public void set enable bool enabled true class MockA public A MOCK METHOD1 set enable void b
  • 如何在单例类和未命名类之间进行选择?

    我会使用这样的单例 Singleton single Singleton instance single gt do it 我会使用这样的未命名类 single do it 我觉得单例模式除了具有可读的错误消息之外 与未命名的类相比没有任何
  • 如何查看每秒更新的图表中的最后 10 个数据点?

    我有这个代码 private void timer Tick object sender EventArgs e timer Stop for int i 0 i lt TOTAL SENSORS i DateTime d DateTime
  • 我想找到 C# 代码中所有后面没有括号的 if 语句。通过正则表达式

    我想找到所有if声明和for后面没有大括号的语句 当你在一个文件中写入一行时if声明您大多不会将其括在大括号中 所以我想找到所有这些if and for声明 请帮忙 就像我想捕捉这个声明 if childNode Name B return
  • Qt 多重继承和信号

    由于 QObject 我在 QT 中遇到了有关多重继承的问题 我知道很多人也有同样的问题 但我不知道该如何解决 class NavigatableItem public QObject Q OBJECT signals void desel
  • 批量插入,asp.net

    我需要获取与会员相对应的 ID 号列表 在任何给定时间处理的数量可能在 10 到 10 000 之间 我可以毫无问题地收集数据 解析数据并将其加载到 DataTable 或任何内容 C 中 但我想在数据库中执行一些操作 将所有这些数据插入表
  • 为什么 C# 中的命名空间允许循环依赖?

    在 c 中 您可以在文件 a cs 其命名空间为 MyApp A 中拥有一条语句 using MyApp B 而文件 b cs 其名称空间为 MyApp B 已经包含该语句 using MyApp A 如果类似的依赖关系存在于不同的 dll
  • 从 SQL 语句中检索元数据(表名)

    我使用的是 Visual Studio 2008 我创建了一个 Winforms 应用程序 并且尝试从 SQL 语句中提取表名 con new SqlConnection connString String queryString Sele
  • ArrayList 有什么问题?

    最近我问了一个关于 SO 的问题 其中提到了可能使用 c ArrayList 来解决问题 有人评论说使用数组列表不好 我想了解更多有关此的信息 我以前从未听说过关于数组列表的这种说法 有人可以带我了解使用数组列表可能出现的性能问题吗 C n
  • 模板类中模板方法专门化的 clang 自动返回类型错误?

    试图理解另一个问题 https stackoverflow com questions 38054055 clang fails to compile template function with auto return type insi
  • asio::this_coro::executor 的实现是什么

    在协程函数中 我们可以添加auto ex co await asio this coro executor 获取该协程的执行者 但当我想了解它的定义时 我发现了这个 Awaitable type that returns the execu
  • 将“C# 友好类型”名称转换为实际类型:“int” => typeof(int)

    我想得到一个System Type给定一个string指定 原始 类型C 友好名称 基本上与 C 编译器读取 C 源代码时的方式相同 我觉得描述我所追求的最好方式是单元测试的形式 我希望存在一种通用技术 可以使以下所有断言通过 而不是尝试对
  • 将二进制长字符串转换为十六进制 C#

    我正在寻找一种将长二进制字符串转换为十六进制字符串的方法 二进制字符串看起来像这样 0110011010010111001001110101011100110100001101101000011001010110001101101011 我
  • 在派生类中访问基类变量

    class Program static void Main string args baseClass obj new baseClass obj intF 5 obj intS 4 child obj1 new child Consol

随机推荐

  • 操作系统-基础

    目录 1 冯诺依曼体系推导与介绍 2 外存与内存 3 操作系统 什么是进程 进程控制块 PCB 调度算法 并发与并行 1 冯诺依曼体系推导与介绍 计算机的作用就是为了解决人的问题 而要解决问题 首先需要将数据或是问题输入到计算机当中 所以计
  • 微信小程序 检测返回事件 左上角返回按钮

    微信小程序 检测返回事件 微信小程序暂时来说没有相对应的检测左上角的返回按钮的事件 不过可以利用app js和onShow事件来完成这个小功能 1 主要就是在app js里面为页面设置相对应的值 例如a页面跳到b页面 然后从b页面返回a页面
  • 【python 2】python 进阶

    文章目录 一 函数 1 函数的参数 2 全局变量和局部变量 3 内部函数 4 闭包 5 匿名函数 6 系统自带的函数 7 递归函数 二 文件操作 三 os 模块 1 os path 2 os 里边的函数 四 异常 五 推导式 1 列表推导式
  • 安卓平板标注pdf,坚果云+zotero+xodo

    问题描述 之前买了个平板 但是使用zotero编辑pdf会出现不能保存等问题 也就是无法实现安卓平板标注pdf且能够多平台同步 WPS是保存到本地一个副本 福昕阅读器提示只能另存或者放弃编辑 静读天下直接就没有保存 这里指的是坚果云app里
  • c++ oop面向对象

    定义基类 基类通常都应该定义一个虚析构函数 即使该函数不执行任何实际操作也是如此 基类必须将它的两种成员函数区分开来 一种是基类希望其派生类进行覆盖的函数 既虚函数 使用virtual关键字 一种是基类希望派生类直接继承而不要改变的函数 c
  • 深度学习基础篇之卷积神经网络(CNN)

    一 CNN的基本结构 首先我们来看CNN的解百纳结构 一个常见的图像识别CNN模型如下图 从图中可以看出最左边的图像就是模型的输入层 在计算机中就是若干个矩阵 这点与DNN类似 接着是卷积层 Convolution Layer 这个层是CN
  • VUE之高德地图轨迹绘制与轨迹回放

    步骤 安装依赖 npm install vue amap S main js中注册 import AMap from vue amap Vue use AMap AMap initAMapApiLoader key 你申请的key plug
  • mysql到sqlite数据传输

    在实际的工作中需要将mysql数据库表中的数据同步到sqlite对应的表中 主要有两种方法 第一种是使用Navicat里的数据传输 第二种是使用程序来实现 第一种 程序实现 1 添加sqlite驱动 本项目是通过maven管理 在pom x
  • kali linux eth0网卡消失解决方法

    eth0网卡消失 不知道什么原因 kali的eth0网卡突然不见了 ifconfig 发现eth0网卡不见了之后可以使用 ifconfig eth0 up 但是 eth0没有ipv4地址 还是没有办法上网 然后我们打开interfaces修
  • WebSocket 详解教程

    概述 WebSocket 是什么 WebSocket 是一种网络通信协议 RFC6455 定义了它的通信标准 WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议 为什么需要 WebSocket 了解
  • Jmeter学习

    个人学习笔记 接口测试分类 接口架构 接口测试要点 接口测试工具 一 接口测试分类 内部接口 1 被测系统各个子模块之间的接口 或被测系统提供给内部使用的接口 外部接口 1 被测系统调用外部接口 2 系统对外提供的接口 二 接口架构 1 基
  • 13款经典JavaScript图形和图表绘制工具

    IT168 技术 如今 在互联网上发布在线免费的Javascript图形和图表绘制工具越来越多 作者此前在一家网站从事复杂的图形学方面的工作 使用highchart 在那期间 没有大量的插件工具可供选择 不像现在 我们可以轻易地找到非常有用
  • 硬件安全技术——芯片安全设计技术4(PUF)

    芯片安全设计技术4 PUF 一 什么是PUF 1 物理不可克隆函数 PUF 2 PUF特性 3 PUF结构 5 与TrustZone技术的区别 二 SRAM PUF特点 1 SRAM PUF 2 SRAM PUF Key存储 3 SRAM
  • Linux配置串口管理以及串口自动登录

    1 配置串口管理 echo S0 12345 respawn sbin agetty ttyS0 115200 gt gt etc inittab vim etc default grub GRUB CMDLINE LINUX DEFAUL
  • 不可压库艾特流的数值解计算机语言,不可压库埃特流的数值解学生洪安仕专业.ppt...

    不可压库埃特流的数值解学生洪安仕专业 学生 杜春雨 洪安仕 专业 化学工程 学号 1014207010 1014207014 学生 杜春雨 专业 化学工程 学号 1014207010 学生 洪安仕 专业 化学工程 学号 1014207014
  • 便携式CAN分析仪、CAN接口卡、USBCAN 如何选型?

    USBCAN系列便携式CAN分析仪 通过USB接口快速扩展一路CAN通道 使接入CAN网络非常容易 它具有一体式和小巧紧凑的外形 特别适合于随身携带 CAN接口采用金升阳CAN隔离收发模块实现3000V DC电气隔离 USB接口ESD静电防
  • 详解Linux中atime,mtime,ctime的使用场景

    一 文件与文件夹三个时间 atime mtime ctime的含义 1 含义 atime Access Time 文件最近被访问时间 mtime Modify Time 文件最近内容修改时间 ctime Change Time 文件最近权限
  • 仅需3 小时,如何用 AI 做场景贴图,完成场景制作 ?AI创作工作流探索

    Mixlab无界社区 跨学科 AI艺术 大家好 我是海辛 是一名影视导演 上面这张图是我通过 Midjourney Blender 制作的最新作品 露娜在元宇宙的拉面店 制作的目标是为了露娜将来在元宇宙能有一份赖以为生的工作 决定给她装修一
  • 10.在两个数之间,求素数

    问题 输入两个数 求在这两个数之间的素数 分析思路 素数 什么是素数 素数就是很朴素的一个数 它只跟1和自己玩 不跟其他数字玩 因此 它只可以被1和自身整除 1不是素数 1 从键盘输入两个数字 scanf 2 判断素数 需要用一个数字 从头
  • 蓝桥杯第十届(2019)B组省赛1-9题练手源码

    1 组队 枚举 题目 作为篮球队教练 你需要从以下名单中选出 1 号位至 5 号位各一名球员 组成球队的首发阵容 每位球员担任 1 号位至 5 号位时的评分如下表所示 请你计算首发阵容 1 号位至 5 号位的评分之和最大可能是多少 题解 过