蓝桥杯第十届(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题练手源码 的相关文章

  • X11 模式对话框

    如何使用 Xlib 在 X11 中创建模式对话框 模态对话框是一个位于应用程序其他窗口之上的窗口 就像瞬态窗口一样 并且拒绝将焦点给予应用程序的其他窗口 在 Windows 中 当试图从模态窗口夺取焦点时 模态也会通过闪 烁模态窗口的标题栏
  • 是否有可能劫持标准输出

    我正在尝试使用 C 重定向 Windows XP 上已运行进程的标准输出 我知道如果我自己生成进程 我可以做到这一点 但对于这个应用程序 我更喜欢一个 监听器 我可以附加到另一个进程 这在纯 Net 中可能吗 如果不可能 在 Win32 中
  • 生成多个随机数

    我想生成 25 个唯一的随机数并将它们列在控制台中 数字的长度应至少为 10 个字符 有什么简单的方法可以做到这一点吗 尝试将数字构建为字符串 并使用 HashSet 确保它们是唯一的 Random random new Random Ha
  • .crt 部分?这个警告是什么意思?

    我最近收到此警告 VC 2010 warning LNK4210 CRT section exists there may be unhandled static initializers or terminators 我假设这是关键部分
  • STL之类的容器typedef快捷方式?

    STL 容器的常见模式是这样的 map
  • 平滑手绘曲线

    我有一个允许用户绘制曲线的程序 但这些曲线看起来不太好 它们看起来摇摇欲坠 而且是手绘的 所以我想要一种能够自动平滑它们的算法 我知道平滑过程中存在固有的模糊性 因此它不会每次都完美 但这种算法似乎确实存在于多个绘图包中 并且它们工作得很好
  • 警告 C4800:“int”:强制值为 bool“true”或“false”(性能警告)

    我的代码中有这个问题 bool CBase isNumber return id MID NUMBER bool CBase isVar return id MID VARIABLE bool CBase isSymbol return i
  • 为什么子函数不销毁GtkWindow?

    这是我的代码 void window first void enter window2 GtkWidget w gpointer data void quit GtkWidget w gpointer data void quit int
  • 如何从 Qt 应用程序通过 ODBC 连接到 MySQL 数据库?

    我有一个新安装的 MySQL 服务器 它监听 localhost 3306 从 Qt 应用程序连接到它的正确方法是什么 原来我需要将MySQL添加到ODBC数据源 我在遵循这个视频教程后做到了这一点 https youtu be K3GZi
  • 将 dataGridView 中选定的行作为对象检索

    我有一堂这样的课 public partial class AdressBokPerson public long Session get set public string F rnamn get set public string Ef
  • Visual Studio 中列表框的上移、下移按钮[重复]

    这个问题在这里已经有答案了 我正在尝试制作一个上移按钮和一个下移按钮 以移动 Microsoft Visual Studio 2012 中列表框中的选定项目 我已经在 WDF jquery winforms 和其他一些表单中看到了其他示例
  • 如何从外语线程调用Python函数(C++)

    我正在开发一个程序 使用 DirectShow 来抓取音频数据 媒体文件 DirectShow 使用线程将音频数据传递给回调 我的程序中的函数 然后我让该回调函数调用另一个函数 Python 中的函数 我使用 Boost Python 来包
  • 您对“大规模 C++ 软件设计”的看法 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 正在阅读亚马逊评论 https rads stackoverflow com amzn click com 0201633620 and ACC
  • C#:自定义转换为值类型

    是否可以将自定义类转换为值类型 这是一个例子 var x new Foo var y int x Does not compile 是否有可能实现上述情况 我需要超载一些东西吗Foo 您将必须重载强制转换运算符 public class F
  • Gremlin.net 文本包含等效项

    我正在使用 Gremlin net 库连接到 janus 图形服务器 我使用 cassandra 和弹性搜索进行数据存储和索引 在我使用的 gremlin 语言和 gremlin 控制台中文本包含在属性的文本中进行搜索 我正在使用混合索引
  • C 变量声明的效率 [重复]

    这个问题在这里已经有答案了 例如 在 C 中声明一个变量需要多长时间int x or unsigned long long var 我想知道它是否会让我的代码在类似的事情中更快 for conditions int var 0 code 这
  • 当我的进程被终止时到底会发生什么?

    我有一个包含本机代码和托管代码的混合进程 在 Windows Server 2003 上运行 当我从进程资源管理器中终止进程时 它会进入 100 cpu 的状态 并在消失之前保持这种状态一段时间 有时甚至 10 分钟 在此期间我无法 杀死
  • 从脚本启用/禁用 GameObject 组件 [Unity3D]

    我需要获取一个脚本中设置的布尔值 放入名为 bouclier 的变量 以启用或禁用游戏对象 该变量位于游戏对象 Player 中 此处右下角 我需要启用或禁用这个游戏对象 Bouclier01 为此 我将脚本附加到游戏对象 Bouclier
  • 如何在 C 中创建最低有效位设置为 1 的掩码

    这个功能如何运作 最低有效 n 位设置为 1 的掩码 Example n 6 gt 0x2F n 17 gt 0x1FFFF 我根本不明白这些 尤其是 n 6 gt 0x2F 另外 什么是面膜 通常的方法是采取1 并将其左移n位 这会给你类
  • 实体框架代码首次日期字段创建

    我正在使用实体框架代码优先方法来创建我的数据库表 下面的代码 创建一个DATETIME数据库中的列 但我想创建一个DATE柱子 DataType DataType Date DisplayFormatAttribute ApplyForma

随机推荐

  • 操作系统-基础

    目录 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 号位的评分之和最大可能是多少 题解 过