• 蓝桥杯:真题讲解2(C++版)附带解析


    星系炸弹

    来自:2015年六届省赛大学B组真题(共6道题)

    分析:这题涉及到平年和闰年的知识,如果我们要解这题,首先要知道每月有多少天,其实也就是看2月份的天数,其它月份的天数都是一样的,只有2月有点不同。

    平年的2月有28天,闰年2月有29天,搞定如何判断平年和闰年,这题也就好解了。

    闰年满足的条件:

    • 能被4整除且不能被100整除
    • 或者能被400整除

     不是闰年就是平年。

    代码演示:

    1. bool is_run(int year)
    2. {
    3. if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) return true;
    4. else return false;
    5. }

    接下来我们模拟题意即可:

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. // 请在此输入您的代码
    6. int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    7. int y=2014,m=11,d=9;
    8. for(int i=0;i<1000;i++){
    9. if((y%4==0&&y%100!=0) || (y%400==0)) mon[2]=29;
    10. else mon[2]=28;
    11. d++;
    12. if(d>mon[m]){
    13. d=1;
    14. m++;
    15. }
    16. if(m>12){
    17. y++;
    18. m=1;
    19. //这里不用写d=1,上面已经判断过了。
    20. }
    21. }
    22. printf("%04d-%02d-%02d",y,m,d);
    23. return 0;
    24. }

    移动距离

    来自:2015年六届省赛大学B组真题(共6道题)

    分析:实际上就是求两点间的距离

    距离公式:点(x1,y1)到(x2,y2)的距离:|x1-x2|+|y1-y2|

    解决方案:

    我们还有一个问题,就是数列的排序是按照蛇形来排序的,那我们怎么处理有反向的数列呢,我们经过短暂的思考,立马给出了解决方案,先按照正常的方式来求,到了最后,我们发现当(x%2)==1 的时候,数的顺序是反的,然后我们就能调整了。

    代码:

    1. #include
    2. using namespace std;
    3. int w, m, n;
    4. int main() {
    5. scanf("%d%d%d", &w, &m, &n);
    6. m --;
    7. n --;//将两个数都进行减1操作
    8. int x1 = m / w, y1 = m % w;//求得正常排序下的,当前数的坐标
    9. int x2 = n / w, y2 = n % w;
    10. if (x1 % 2 ==1) y1 = w - y1 - 1;//标记反向数列的纵坐标
    11. if (x2 % 2 ==1) y2 = w - y2 - 1;//标记反向数列的纵坐标
    12. cout << abs(x1 - x2) + abs(y1 - y2) << endl;//曼哈顿距离公式
    13. return 0;
    14. }

    煤球数目

    来自:2016年七届省赛大学B组真题(共6道题)

    分析:找规律即可,第零层到第一层+1,第一层到第二层+2,第二层到第三层加+3,第三层到第四层+4,以此类推。

    代码:

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. // 请在此输入您的代码
    6. int sum=0,d=0;
    7. for(int i=1;i<=100;i++){
    8. d+=i; //累积d的值,因为它的规律是+2 、 +3 、+4。
    9. sum+=d;
    10. }
    11. cout << sum;
    12. return 0;
    13. }

    生日蜡烛

    分析:直接2层for循环暴力即可。

    代码:

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. // 请在此输入您的代码
    6. int i;
    7. for (i = 0; i < 100; i++) { //i<100就行了,搞个大概就ok。
    8. int sum = 0;
    9. for (int j = i; j < 100; j++) {
    10. sum += j;
    11. if (sum == 236) break;
    12. }
    13. if (sum == 236) break;
    14. }
    15. cout << i;
    16. return 0;
    17. }

    四平方和

    来自:2016年七届省赛大学B组真题(共6道题)

    先用暴力求解,代码:

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. // 请在此输入您的代码
    6. long long N;
    7. cin >> N;
    8. for(int i=0;i<=N;i++){
    9. for(int j=0;j<=N;j++){
    10. for(int k=0;k<=N;k++){
    11. for(int m=0;m<=N;m++){
    12. if(i*i+j*j+k*k+m*m == N){
    13. int a[4]={0};
    14. a[0]=i;
    15. a[1]=j;
    16. a[2]=k;
    17. a[3]=m;
    18. sort(a,a+4);
    19. cout << a[0] << " " << a[1] << " " << a[2] << " " << a[3];
    20. return 0;
    21. }
    22. }
    23. }
    24. }
    25. }
    26. return 0;
    27. }

    运行后只能过62.5%的测试数据,下面改进一下代码:

    1. #include
    2. using namespace std;
    3. int main() {
    4. long long n,a,b,c,d;
    5. cin>>n;
    6. long long s=sqrt(n)+1; //习惯上+1,不加也是正确的,每个正整数到不了一半。
    7. for(a=0; a<=s; a++) { //注意以下每个for循环前边初值继承上一循环体的值,保证从小到大的顺序
    8. for(b=a; b<=s; b++) {
    9. for(c=b; c<=s; c++) {
    10. for(d=c; d<=s; d++) {
    11. if(a*a + b*b + c*c + d*d == n) {
    12. cout<" "<" "<" "<
    13. return 0;
    14. }
    15. }
    16. }
    17. }
    18. }
    19. return 0;
    20. }

    交换瓶子

    来自:2016年七届省赛大学B组真题(共6道题)

    代码(注释中标明了代码含义):

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. // 请在此输入您的代码
    6. int a[10010];
    7. int n,res=0;
    8. cin >> n;
    9. for(int i = 1; i<=n;i++){
    10. cin >> a[i];
    11. }
    12. for(int i = 1;i <=n;i++){
    13. while(a[i]!=i){
    14. swap(a[i],a[a[i]]); //瓶子是有序排放的,所以下标为1的位置就应该放1号
    15. res++;
    16. }
    17. }
    18. cout << res;
    19. return 0;
    20. }

  • 相关阅读:
    MySQL:IFNULL无法返回null的情况
    阿里云:云服务器ECS搭建
    Python 绘图大全之使用 Python Folium 制作生成热图的详细指南
    R语言替换字符串中指定字符的子串:sub函数查找字符串中第一个匹配到的子串并替换(第一个之后的子串不做替换)
    VRRP简介
    关闭文件流
    How to get ‘kernel config‘ when CONFIG_IKCONFIG is not set ? (Preliminary)
    动力总成悬置系统刚度及模态有效质量计算公式推导
    新买的笔记本电脑分区,笔记本分区分错了怎么重新分
    Linux、docker、kubernetes、MySql、Shell运维快餐
  • 原文地址:https://blog.csdn.net/m0_74098386/article/details/136230035