2021年蓝桥杯省赛B组题解(C/C++) 来自微信公众号:算法梦工厂,二维码见文末。可关注公众号获取往年试题题解。 欢迎加入蓝桥杯备赛群:768245918,获取往届试题,测试数据,算法课程等相关资源。
试题 A: 空间 问题描述 ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f415fbcb0cf7e3780b9940f8ca0e9bbf.jpeg#pic_center)
涉及知识点:计算机基础知识
答案: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: 卡片 问题描述 ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/061acf42aa3a50ef8dec338c33c1a8a0.jpeg#pic_center)
答案: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])