• 蓝桥杯刷题(一)



    在这里插入图片描述

    蓝桥杯题库

    1.单词分析

    在这里插入图片描述在这里插入图片描述

    我本人其实是比较讨厌操作字符的,因为比较麻烦,所以我将字符都用ascll码值表示。例如‘a’=97,‘b’=98,c=‘99’,所以b-a=1

    #include
    #include
    int main()
    {
     char input;
     char arr[26]={0};//一共26个字母
     int max=0;
     int i=0;
     while((input=getchar())!='\n')//使用getchar一个一个接收字符,我也用过scanf来接收,但scanf要么是接收字符串,要么就必须每敲一个字符敲一下回车
     {
       arr[input-'a']++;//注意arr[?]是表示这个元素,不是数组
     }
     for(i=0;i<26;i++)//26个字母依次比较
     {
       if(arr[i]>arr[max])
       {
         max=i;
       }
     }
     printf("%c\n%d",max+'a',arr[max]);
     return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    2.成绩统计

    在这里插入图片描述在这里插入图片描述

    这道题写代码很简单,主要考察输出部分,如何输出百分号并四舍五入

    #include 
    
    int main()
    {
      int n=0,i=0,input=0,pass=0,good=0;
      scanf("%d",&n);
      int arr[10001]={0};
      for(i=0;i<n;i++)
      {
        scanf("%d",&arr[i]);//把每个成绩都用数组存起来
        if(arr[i]>=60)
        {
          pass++;
        }
        if(arr[i]>=85)
        {
          good++;
        }
      }
      printf("%.0f%%\n",(pass*100)/(n*1.0));//想变成百分比,再多加两个%就可以了
      printf("%.0f%%\n",(good*100)/(n*1.0));//0.f就是小数点后保留0位,就是四舍五入到整数了
    
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    3.最短路

    在这里插入图片描述

    #include 
    #include 
    
    int main(int argc, char *argv[])
    {
      printf("6");//人脑神经计算法
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    大神解法,反正我是看不懂…

    #include 
    #include 
    using namespace std;
    const int N=200,n=19;
    int dist[N];
    int g[N][N];
    void add(char x,char y,int c)
    {
      int a=x-'A'+1;
      int b=y-'A'+1;
      g[a][b]=g[b][a]=c;
    }
    bool vis[N];
    int dijkstra()
    {
      memset(dist,0x3f,sizeof dist);
      dist[1]=0;
      for(int i=0;i<n;i++)
      {
        int t=-1;
        for(int j=1;j<=n;j++)
        {
          if(!vis[j]&&(t==-1||dist[j]<dist[t]))
            t=j;
        }
        vis[t]=1;
    
        for(int j=1;j<=n;j++)
        {
          dist[j]=min(dist[j],dist[t]+g[t][j]);
        }
      }
      return dist[n];
    }
    int main()
    {
        memset(g,0x3f,sizeof g);
        add('A','B',2);
        add('A','C',1);
        add('A','D',1);
        add('A','D',1);
        add('B','J',2);
        add('B','G',1);
        add('C','D',3);
        add('C','F',3);
        add('C','G',3);
        add('D','E',1);
        add('D','G',2);
        add('D','H',1);
        add('D','I',2);
        add('E','H',1);
        add('E','I',3);
        add('F','G',1);
        add('F','J',1);
        add('G','F',1);
        add('G','I',3);
        add('G','K',2);
        add('H','I',1);
        add('H','L',2);
        add('I','M',3);
        add('J','S',2);
        add('K','N',1);
        add('K','L',3);
        add('K','P',2);
        add('L','M',1);
        add('L','R',1);
        add('M','N',2);
        add('M','Q',1);
        add('M','S',1);
        add('N','P',1);
        add('O','P',1);
        add('O','Q',1);
        add('O','R',3);
        add('R','S',1);
        cout<<dijkstra();
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77

    4.门牌制作

    在这里插入图片描述

    这道题主要考两方面,一是如何得出每个数有多少个2,二是如何将每个数的2的个数相加起来

    #include 
    #include 
    
    int Count(int i)//计算每个数有多少个2
    {
      if(i==0)
      {
        return 0;
      }
      if(i>0)
      {
        if(i%10==2)
        return 1+Count(i/10);
        if(i%10!=2)
        return Count(i/10);
      }
    }
    int main(int argc, char *argv[])
    {
      int sum=0;
      int arr[20000]={0};
      int i=0;
      int j=0;
      int k=0;
      for(i=1;i<=2020;i++)
      {
        arr[j++]=Count(i);//将每个数的2的个数存入数组
      }
      for(k=0;k<j;k++)//将数组中每个数加起来
      {
         sum+=arr[k];
      }
      printf("%d",sum);
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    5.数字三角(较困难)

    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    难点

    这道题的难点是要向左下走的次数与向右下走的次数相差不能超过 1。ps:这说的是全部过程,不是每一步

    这里我们通过找规律可以发现如果是奇数行的话,那么它最后总会走到最后一行的中间。
    如果是偶数行的话,那么会走到中间两个数的其中一个上

    思路

    这里我们分为三类(以第4行为例)
    1.如果走到最左边(2),那么它肯定是从它的上右那个数字走来的(1)
    2.如果走到最右边(4),那么它肯定是从它左上那个数走来的(0)
    3.如果走到中间(7),那么它就可能是(8或0)走来的,我们取最大的那个,当然(4)我们也这样看,它的右上我们初始化是0,所以实际上是用(1和0)来比较

    #include 
    #include 
    int MAX(int a, int b)
    {
        return a > b ? a : b;
    }
    int main()
    {
        int n = 0;
        scanf("%d", &n);
        int arr[100][100]={0};
        int i = 0, j = 0;
        for (i = 0; i < n; i++)
        {
            for (j = 0; j <= i; j++)
            {
                scanf("%d", &arr[i][j]);//储存数据
            }
        }
        for (i = 0; i < n; i++)//实际上是求出从第一行到该行数值总和
        {
            for (j = 0; j <= i; j++)
            {
                if (i > 0)//从第二行开始
                {
                    if (j == 0)//最右边
                    {
                        arr[i][j] += arr[i - 1][j];
                    }
                    else if (j == i)//最左边
                    {
                        arr[i][j] += arr[i - 1][j - 1];
                    }
                    else//中间
                    {
                      arr[i][j]+= MAX(arr[i - 1][j - 1], arr[i - 1][j]);
                    }
                }
            }
        }
        if (n % 2 == 1)//如果是奇数行
        {
            printf("%d\n", arr[n-1][(n-1)/2]);
        }
        else//如果是偶数行
        {
            printf("%d", MAX(arr[n-1][(n-1) / 2], arr[n-1][(n-1) / 2 + 1]));
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
  • 相关阅读:
    银河麒麟 ARM 架构 离线安装Docker
    揭秘Redis的高效失效策略,提升可用性
    Java Map集合的详解
    农场管理小程序|基于微信小程序的农场管理系统设计与实现(源码+数据库+文档)
    智能井盖传感器特点是什么?
    我只认两种产业互联网形态
    Tinyalsa PCM API 实现深度剖析
    io_uring之liburing库安装
    NVIDIA CUDA Win10安装步骤
    maven介绍
  • 原文地址:https://blog.csdn.net/m0_73790767/article/details/127924856