导航菜单
首页 >  蓝桥杯真题解析pdf  > 【蓝桥杯真题】2021年蓝桥杯省赛B组题目解析+代码(C/C++)

【蓝桥杯真题】2021年蓝桥杯省赛B组题目解析+代码(C/C++)

2021年蓝桥杯省赛B组题解(C/C++)

来自微信公众号:算法梦工厂,二维码见文末。可关注公众号获取往年试题题解。 欢迎加入蓝桥杯备赛群:768245918,获取往届试题,测试数据,算法课程等相关资源。

试题 A: 空间 问题描述

在这里插入图片描述

涉及知识点:计算机基础知识

答案:67108864 解析:

主要考察一些计算机的基础知识,323232 位二进制数需要占444 个字节,256MB=256∗1024KB=256∗1024∗1024256MB = 256*1024KB = 256*1024*1024256MB=256∗1024KB=256∗1024∗1024 字节,所以一共可以存储的323232 位二进制整数的数量就是:256∗1024∗1024/4=67108864256*1024*1024/4 = 67108864256∗1024∗1024/4=67108864 。

代码: #include int main() { printf("%d", 256 * 1024 * 1024 / 4); return 0;}试题 B: 卡片 问题描述

在这里插入图片描述

答案:3181 解析 涉及知识点:枚举,十进制拆分做法:初始化 res_num 数组记录当前每种卡牌剩余数量,从1向上枚举需要组合的卡片,直到剩余卡片不足则停止累加,最后成功组合成的卡片即为答案。 代码 #include using namespace std;vector Split(int x) { // 将x按照十进制拆分每一位 vector ret; if (x == 0) {ret.push_back(0);return ret; } while (x > 0) {ret.push_back(x % 10);x /= 10; } return ret;}const int maxn = 2021;int rest_num[10] = {0}; // 记录当前每种数字卡牌剩余数量bool Sub(const vector &x) { // 将当前需要的数字卡牌从卡牌库中去除,卡牌库剩余卡牌不足则返回false for (unsigned int i = 0; i a = a;this->b = b; }};vector lineList;double Dis(Point p0, Point p1) { // 计算点p0和p1之间的直线距离 return sqrt((p0.x - p1.x) * (p0.x - p1.x) + (p0.y - p1.y) * (p0.y - p1.y));}bool CheckPointInLine(Line x, Point p) { // 检查点p是否在直线x上 double dis[3]; dis[0] = Dis(x.a, x.b); dis[1] = Dis(x.a, p); dis[2] = Dis(x.b, p); sort(dis, dis + 3); if (fabs(dis[0] + dis[1] - dis[2])

相关推荐: