十二届蓝桥杯省赛B组C++解析(填空题部分)

目录

  • 十二届蓝桥杯省赛B组C++解析(填空题部分)
  • A:空间
  • B:卡片
  • C:直线
  • D:货物摆放
  • E:路径

A:空间


该题是一道计算机基础原理题,这里需要了解的是:
** 1MB=1024KB=1024*1024B
KB即千字节,B为字节
1B=8bit(位)
因为通常一个字节(刚好最大256位)可以储存一个ASCII码**

故计算过程应如下:
25610241024/4=67108864

答案:67108864

B:卡片


暴力解决即可:

#include<iostream>using namespace std;
int a[10]={0};int process(int n)
{while(n != 0){a[n%10]--;n/=10;}
}bool Judge()
{for(int i = 0; i < 10; i++){if(a[i] <= 0)return false;}return true;
}int main()
{for(int i = 0; i < 10; i++)a[i] = 2021;int n = 1;while(Judge()){process(n);n++;}cout << n - 1;return 0;
}

答案:3181

C:直线


直线的一般方程为:
(y1-y2)x+(x2-x1)y+x1y2-x2y1=0
看作三个部分:
A=(y1-y2) B=(x2-x1) C=x1y2-x2y1
将三个部分化最简,以类的形式记录后
用map映射结构体记录即可

#include<iostream>
#include<map>using namespace std;int gcd(int a, int b)
{return b ? gcd(b, a%b):a;
}class ABC
{
public:int A;int B;int C;ABC(){A = 0;B = 0; C = 0 ;}ABC(int a, int b, int c){int tool = 0;if(c == 0)tool = gcd(a,b);elsetool = gcd(gcd(a,b),c);A = a / tool;B = b / tool;C = c / tool; }
};bool operator < (ABC a,ABC b)  //map使用的时候得定义大小判断
{if(a.A<b.A)return true;else if(a.A==b.A&&a.B<b.B)return true;else if(a.A==b.A&&a.B==b.B&&a.C<b.C)return true;return false;
}map<ABC,int>mp;
int main()
{int x1, x2, y1, y2;int A,B,C;int ans = 0;for(y2 = 1; y2 <21; y2++){for(x2 = 0; x2 < 20; x2++){for(y1 = 0; y1 < y2 ; y1++){for(x1 = 0; x1 <20; x1++){if(x1 == x2 || y1 == y2 )continue;A=y1-y2;B=x2-x1;C=y2*x1-x2*y1;ABC a(A,B,C);if(mp[a]!=1){mp[a]=1;ans++;}}}}}cout << ans+21+20;return 0;
}

答案:40257

D:货物摆放

求出要求体积的各个因子,判断这些因子组合出目标值的情况的数量即为答案
因子的个数可以先算出来直接带进去

#include<iostream>
#include<math.h>using namespace std;long long int n=2021041820210418;
long long int N[129];
long long int mark = 0;
int ans = 0;
int a = 0;int main()
{for(long long int i = 1; i < sqrt(n); i++){if(n%i == 0){N[a++] = i;N[a++] = n/i;mark+=2;}}N[128] = 0;for(long long int i = 0; i < 128; i++){for(long long int j = 0; j < 128; j++){for(long long int k = 0; k < 128; k++){if(N[i] * N[j] * N[k] == n)ans++;}}}cout << ans;return 0;
}

答案:2430

E:路径


这题参考了一位大佬的思路,本文最下面也附了他的链接。
这题的思路如下(依次题条件举例解释):
1.求1到3的最短路程
情况有两种:
①1 ->2 + 2>3
②1->3
求出其中最短的即可
2.求1到4的最短路程
①1->2 + 2->4
②1->3 + 3->4
求出其中最短的即可
3.求1到5的最短路程
①1->2 + 2->5
②1->3 + 3->5
③1->4 + 4->5
求出其中最短的即可
4.求1到24的最短路程
①1->3 + 3->24
②1->4 + 4->24
③1->5 + 5->24

⑲1->22 + 22->24
⑳1->2 + 2->3 + 3->24(若为该情况,与①比较,发现其实是1->3与1 ->2 + 2>3的比较,因为更小的情况已经被记录,其实就是1->3 + 3->24这种情况)

1->2+2->23+23->24(若为该情况,即为1->23 + 23->24,因为无论是1->3+3->23还是1->4+4->23都会小于求的的1->23的距离)
可以发现从1,2问求出的结果可以逐渐求出1->23,1->24,1->25的结果。
求法即为算出:
①1->3 + 3->24
②1->4 + 4->24
③1->5 + 5->24

⑳1->23 + 23->24
中最短的即可
5.求1到2021的最短路程
①1->2000 + 2000->2021
②1->2001 + 2001->2021
③1->2002 + 2002->2021

⑳1->2020 + 2020->2021
中最短的即可

代码如下:

#include<iostream>using namespace std;
int dp[2022];//最大公约数
int gcd(int a, int b)
{return b ? gcd(b, a % b) : a;
}//最小公倍数
int lcm(int a, int b)
{return ((a * b) / gcd(a,b));
}//求到各点最小距离函数
void fun(int n)
{int i = 1;if(n >= 22)i = n - 21;int min = dp[i] + lcm(i,n);for (++i; i < n; i++){int temp = dp[i] + lcm(i, n);min = temp > min ? min : temp;}dp[n] = min;
}int main()
{dp[1] = 0;for (int i = 2; i <= 2021; i++){fun(i);}cout << dp[2021];
}

答案:10266837

全部题的解析可以看:https://blog.csdn.net/JAPHETH1/article/details/116325106

十二届蓝桥杯省赛B组C++解析(填空题部分)相关推荐

  1. 2021年软件类第十二届蓝桥杯 省赛 python组 F-J题解

    2021年软件类第十二届蓝桥杯 省赛 python组 F-J题解 文章目录 2021年软件类第十二届蓝桥杯 省赛 python组 F-J题解 试题 F:时间显示 题目描述 输入描述 输出描述 输入输出 ...

  2. 2021年第十二届蓝桥杯省赛B组(C/C++)第二场题解

    文章目录 2021年第十二届蓝桥杯省赛B组(C/C++)第二场题解 1.求余 2.双阶乘 3.格点 4.整数分解 5.城邦 6.特殊年份 7.小平方 8.完全平方数 9.负载均衡 10.国际象棋 20 ...

  3. 2021第十二届蓝桥杯省赛B组C/C++ 试题 E: 路径

    2021第十二届蓝桥杯省赛B组C/C++ 试题 E: 路径 代码 试题 E: 路径 Ans=10266837 我哭了 最短路径的题考前刷了多少道,最后还是在考场翻车 还是太菜啊啊.. 首先是边权图的初 ...

  4. 2021年第十二届蓝桥杯省赛B组(C/C++)个人题解

    Problem A 空间 计组基础题:256MB=256 * 2^20 * 8 位 所以存放32位元素可以存放 256 * 1024 * 1024 * 8 / 32 ans: 67108864 送分题 ...

  5. 2021年第十二届蓝桥杯省赛B组C/C++部分填空题解

    题A: 看到题意很容易算出答案就是256乘1024乘1024乘8除以32 答案:67108864 题B: 直接模拟就好了,用一个数组来记录每个数字的次数,暴力到数组该数字不够时,就不能表示完这个数字. ...

  6. 第十二届蓝桥杯省赛JavaC组【第二场】真题——详细答案对照(完整版)

    目录 #A 浮点数 #B 求余 #C 双阶乘 #D 格点 #E 整数分解 #F 3 的倍数 #G 特殊年份 #H 小平方 #I 完全平方数 #J 负载均衡 #A 浮点数 本题总分:5 分 问题描述 I ...

  7. 第十二届蓝桥杯省赛A组试题:左儿子右兄弟Java

    [问题描述] 对于一棵多叉树,我们可以通过 "左孩子右兄弟" 表示法,将其转化成一棵二叉树.如果我们认为每个结点的子结点是无序的,那么得到的二叉树可能不唯一.换句话说,每个结点可以 ...

  8. 第十二届蓝桥杯省赛A组砝码称重Java解题思路及代码

    [问题描述] 你有一架天平和 N个砝码,这N个砝码重量依次是W1, W2, -, Wn. 请你计算一共可以称出多少种不同的重量?注意砝码可以放在天平两边. [输入格式] 输入的第一行包含一个整数N. ...

  9. 2021年第十二届蓝桥杯 - 省赛 - C/C++大学A组 - D.路径

    2021年第十二届蓝桥杯 - 省赛 - C/C++大学A组 - D.路径 Ideas 算法:最短路径 数据结构:图 思路:根据规则构图,单源最短路径Dijkstra算法. 首先构图其实很简单,就是按照 ...

最新文章

  1. Tensorflow学习教程集合
  2. DFTug Test_point
  3. Html基础知识详解
  4. P3835-[模板]可持久化平衡树【无旋Treap】
  5. 选择的按钮:将ToggleButtons用作单选按钮
  6. gwt格式_GWT –利弊
  7. 经典Android开发教程!这些新技术你们都知道吗?年薪超过80万!
  8. Z-Stack通过按键中断实现长按功能
  9. Redis-Bitmap介绍及使用
  10. python init main_python 模块中的 __init__.py __main__.py
  11. sublime text3创建文件时生成头部注释
  12. 医院职工离职申请证明模板,共计10篇
  13. 我用python自制hosts修改神器,组长说你他娘的还真是个天才(附源码)
  14. 团队沟通:为何如此重要以及如何改
  15. 小学生日常行为规范PPT模板
  16. 苏宁易购商品详情API接口
  17. SkeyeVSS森林防火远程监控解决方案
  18. mix2线刷开发板救砖_小米MIX 2手机一键线刷救砖教程,轻松刷回官方系统
  19. LeetCode#17 Python解
  20. 游戏项目管理经验方法

热门文章

  1. 混合装置实现了24/7的能量收集和储存
  2. 2021年大数据Flink(四十一):​​​​​​​Flink实现订单自动好评
  3. Python:Item Pipeline
  4. Android Read-only file system
  5. android 短信验证码的实现
  6. 使用Dom4j操作XML数据
  7. 【转】Winform输入法控制
  8. 【转】堆栈和托管堆 c#
  9. [原]SSL 开发简述(Delphi)
  10. win合适做服务器的系统,win系统做云服务器