• 蓝桥杯 题库 简单 每日十题 day4


    在这里插入图片描述

    01

    津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。

    输入描述 Input Description

    输入包括七行数据,分别表示周一到周日的日程安排。每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。

    输出描述 Output Description

    输出包括一行,这一行只包含一个数字。如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用1, 2, 3, 4, 5, 6, 7分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。

    样例输入 Sample Input

    5 3

    6 2

    7 2

    5 3

    5 4

    0 4

    0 6

    样例输出 Sample Output

    3

    #include
    
    int main(){
    
    int a,b,i,day,max,array[8];
    
    char c;
    
    for(i=1;i<=7;i++){
    
    scanf("%d %d",&a,&b);
    
    array[i]=a+b;
    
    }
    
    max=array[0];
    
    for(i=1;i<=7;i++){
    
    if(max<array[i]){
    
    max=array[i];
    
    day=i;
    
    }
    
    }
    
    if(max>8)
    
    printf("%d",day);
    
    else printf("%d",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

    02 日期问题

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

    #include 
    #include 
    int a=0,b=0,c=0;   //全局变量
    int run(int x){  //检测当年是否为闰年,是闰年返回1,不是闰年返回0
      if(x%4==0&&x%100!=0)return 1;
      if(x%400==0)return 1;
      return 0;
    }
    int check(int i,int j,int k){     //检测三个参数是否符合要求,符合返回1,不符合返回0
      i=i%100;
      if(a==i && b==j && c==k)return 1;  //a-b-c 年月日
      if(a==k && b==j && c==i)return 1;  //a-b-c 日月年
      if(a==j && b==k && c==i)return 1;  //a-b-c 月日年
      return 0;   
    }
    
    int main(int argc, char *argv[])
    { int i=0,j=0,k=0;
      int month[13]={0,31,0,31,30,31,30,31,31,30,31,30,31};  //闰年2月有29号,平年2月只有28号
      scanf("%d/%d/%d",&a,&b,&c);
      for(i=1960;i<=2059;i++){   //年份遍历
        for(j=1;j<=12;j++){  //月份遍历
          if(run(i)==1)month[2]=29;else month[2]=28;
          for(k=1;k<=month[j];k++){   //日遍历
            if(check(i,j,k)==1){printf("%d-%02d-%02d\n",i,j,k);}
          }
        }
      } 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

    03 杨辉三角形

    在这里插入图片描述
    输入描述
    输入一个整数 N。

    输出描述
    输出一个整数代表答案。

    输入输出样例
    示例 1
    输入

    6
    
    • 1

    输出

    13
    
    • 1
    //解题思路:
    //1、首先通过画图,发现杨辉三角对称,而题目要求找到数 n 最早出现的位置,
    //那么我们可以确定,n最早出现的位置一定在左半边,而且最中间的是该行最大的数
    //通过图,我们可以发现通过行和列的枚举是不好的,看数据1e9也就是十亿, 
    //2.这是个很大的工程,因此我们试想可不可以从斜行来观察呢??
    //下图我们可以观察到,第1斜行的1=C(0,0),第二斜行的2=C(2,1),第三斜行的6=C(4,2),第四斜行的20=C(6,3)…
    //也就是说,如果我设共 i 斜行,那么第 i 斜行的第一个数为C(2*i,i),同时它是该斜行中最小的数字
    //那么我们一定可以找到1e9的位置
    //3.1e9的位置确定:
    //显然C(32,16)< 1e9,而C(34,17)> 1e9,因此我们可以对前16行进行枚举
    //4.枚举顺序:
    //首先对于左半边杨辉三角来说,每行最大的数一定出现在该行末尾,同时它也是该数最早出现的位置
    //因此我们不妨从第16斜行开始枚举,只要出现等于 n 的数直接返回位置即可
    //对于查找,我们可以对每个斜行采用二分的方法查找n
    //对于位置,我们可以在查找的时候确定,n所在行 r(不是斜行)和所在斜行 k ,
    //然后通过等差公式 r*(r+1)/2 计算它之前数目的个数再加上 k+1
    //例如:n = 20 (由于推到,第一行行号为 0 ,斜行行号也是 0)
    //查找过程我们可以确定20在第7行,实际返回 r = 6 ,在第 4 斜行 ,但此时 k 是 3,因此 k+1
    //结果 ans = 6*7/2 + 3 + 1 = 25
    //5.时间复杂度的计算: 
    //枚举16斜行 --> O(16)
    //二分查找 --> O(logn)
    //综合起来,算法时间复杂度为 O(16logn)
    #include
    #include
    #define ll long long 
    int n;
    int max(int a,int b)
    {
      return a>b?a:b;
    }
    ll C(int a,int b)//计算二项式C(a,b) 
    {
        ll res=1;
        int i,j;
        for(i=a,j=1;j<=b;i--,j++)
        {
            res=res*i/j;
            if(res>n)
            {
                return res;//如果大于n已经无意义了,因为斜行是递增的 
            }
        }
        return res;
    }
    int check(int k)
    {
        //二分该斜行,找到大于等于该值的第一个数
        //左边界2k,右边界max(n,l),避免右边界小于左边界 
        int l=2*k,r=max(n,l);
        while(l<r)
        {
            int mid=(l+r)/2;
            if(C(mid,k)>=n) r=mid;
            else l=mid+1;
        }
        if(C(r,k)!=n)
        {
            return 0;
        }
        printf("%lld",(ll)(r+1)*r/2+k+1);
        return 1;
    }
    int main()
    {
        scanf("%d",&n);
        int i;
        //从第16斜行枚举 
        for(i=16; ;i--)
        {
            if(check(i)==1)
            {
                break;
            }
         } 
        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

    04 两数之和

    题目描述

    输入一个整数n,输入n个整数存入数组 nums 再输入一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

    输入格式

    输入n和n个整数的数组,再输入一个整数target

    输出格式

    输出两个整数表示数组下标

    输入样例1

    4 2 7 11 15 9

    输出样例1

    0 1

    输入样例2

    3 3 2 4 6

    输出样例2

    1 2

    输入样例3

    2 3 3 6

    输出样例3

    0 1

    #include
    
    int main()
    
    {
    
    int n,i,j;
    
    scanf("%d",&n);
    
    int nums [n];
    
    for(int i=0;i<n;i++){
    
    scanf("%d",&nums[i]);
    
    }
    
    int target;
    
    scanf("%d",&target);
    
    for(int i=0;i<n-1;i++){
    
    for(int j=1;j<=n;j++){
    
      if(nums[i]+nums[j]==target){
    
      printf("%d %d",i,j);
    
      break;
    
      }
    
    }
    
    }
    
    
    
    
    
     } 
    
    • 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

    05 反转字符串

    题目描述

    输入一个整数k和字符串,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

    如果剩余字符少于 k 个,则将剩余字符全部反转。

    如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

    输入格式

    输入整数k和字符串s

    输出格式

    输入样例1

    2 abcdefg

    输出样例1

    bacdfeg

    输入样例2

    2 abcd

    输出样例2

    bacd

    #include 
    #include 
    void reverseString(char *str, int k) {
        int len = strlen(str);
        int i;
    
        for (i = 0; i < len; i += 2 * k) {
            int left = i;
            int right = (i + k - 1 < len) ? (i + k - 1) : (len - 1);
    
            while (left < right) {
                char temp = str[left];
                str[left] = str[right];
                str[right] = temp;
                left++;
                right--;
            }
        }
    }
    
    int main() {
        int k;
        char str[100];
    
        scanf("%d %s", &k, str);
        reverseString(str, k);
        printf("%s\n", str);
    
        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

    06 受伤的皇后

    在这里插入图片描述
    输入描述
    输入的第一行包含一个整数 n。

    其中,1≤n≤10。

    输出描述
    输出一个整数,表示答案。

    输入输出样例
    示例 1
    输入

    4
    
    • 1

    输出

    2
    
    • 1
    #include 
    using namespace std;
    int chess[15] = {};
    int n, cnt = 0;
    //r是行,y是列
    bool check(int y, int r) {
        for (int i = 0; i < r; ++i) {            //遍历前r行
            if (chess[i] == y) return false;    //前面某行上的该列已有棋子
            else if (abs(i - r) == abs(chess[i] - y) && abs(i - r) < 3) return false;    //对角线上已有棋子
        }
        return true;
    }
    void dfs(int r) {    //r是行
        if (r == n) {
            ++cnt;
            return;
        }
        for (int i = 0; i < n; ++i) {
            if (check(i, r)) {
                chess[r] = i;
                dfs(r + 1);
            }
        }
    }
    int main() {
        cin >> n;
        dfs(0);
        cout << cnt << endl;
        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

    07 谈判

    在这里插入图片描述
    输入输出样例
    示例 1
    输入

    4
    9 1 3 5
    
    • 1
    • 2

    输出

    31
    
    • 1
    #include 
    #include 
    int main()
    {
      int num,temp;
      int ans = 0;
      scanf("%d",&num);
      int clan[num];
      for(int i = 0;i < num;i++)
      {
        scanf("%d",&clan[i]);
      }
    
      for(int i = 0;i < num;i++)
      {
        for(int j = i + 1;j < num;j++)
        {
          if(clan[i] > clan[j])
          {
            temp = clan[i];
            clan[i] = clan[j];
            clan[j] = temp;
          }
        }
      }
      for(int i = num - 1;i >= 0;i--)
      {
        if(i) ans += clan[i] * (num - i);
        else ans += clan[i] * (num - i - 1);
      }
      printf("%d",ans);
      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

    08 灌溉

    在这里插入图片描述
    输出描述
    输出一个整数,表示答案。

    输入输出样例
    示例 1
    输入

    3 6
    2
    2 2
    3 4
    1
    
    • 1
    • 2
    • 3
    • 4
    • 5

    输出

    9
    
    • 1
    #include 
    void disp(int x,int y,int a[x][y])//显示花园情况 
    {
        for(int i=0;i<x;i++){
            for(int j=0;j<y;j++)
                printf(" %d  ",a[i][j]);
            printf("\n\n");
        }
    }
    int main()
    {
        int n,m,t,r,c,k,ans=0,list_i=0;//list_i后面就知道是什么了 
        scanf("%d %d",&n,&m);
        scanf("%d",&t);
        int gd[n][m],waterlist[10000][2]={0}; //waterlist是保存当前有水格子坐标的清单 
        
        for(int i=0;i<n;i++) //花园初始化 
            for(int j=0;j<m;j++)
                gd[i][j]=0;
        
        //disp(n,m,gd);
        
        while(t--){
            scanf("%d %d",&r,&c);
            gd[r-1][c-1]=1;    //输入水源坐标,题目指现实中的坐标,要-1 
        }
        
        //disp(n,m,gd);
        scanf("%d",&k);
        while(k--)
        {
            for(int i=0;i<n;i++)
            {
                for(int j=0;j<m;j++)
                {
                    if(gd[i][j]==1)//遍历整个花园,找到当前有水的格子 
                    {
                        waterlist[list_i][0]=i;
                        waterlist[list_i++][1]=j;//将有水格子的坐标保存到waterlist中,list_i就是清单的序号 
                    }
                }
            }
            for(int i=0;i<list_i;i++){    //开始扩散,记得判断边界,花园以外的地方超过了数组范围 
                gd[waterlist[i][0]] [waterlist[i][1]]=1;
                gd[waterlist[i][0]] [waterlist[i][1]+1]=(waterlist[i][1]+1<=n+1);
                gd[waterlist[i][0]] [waterlist[i][1]-1]=(waterlist[i][1]-1>=0);
                gd[waterlist[i][0]+1] [waterlist[i][1]]=(waterlist[i][0]+1<=m+1);
                gd[waterlist[i][0]-1] [waterlist[i][1]]=(waterlist[i][0]+1>=0);
            }
        }//一分钟后,k+1,重新遍历整个花园,更新有水格子清单,进行第二次扩散,以此类推。 
        //disp(n,m,gd);
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                ans+=gd[i][j];
            }
        } 
        printf("%d",ans);
         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

    09 翻硬币

    在这里插入图片描述

    输出描述
    一个整数,表示最小操作步数。

    输入输出样例
    示例
    输入

    **********
    o****o****
    
    • 1
    • 2

    输出

    5
    
    • 1
    #include
    #include
    using namespace std;
    void swap(char x[1005],int i){
        if(x[i]=='*'){
            x[i] = 'o';
        }else
            x[i] = '*';
    }
    int main()
    {
        char s[1000];
        char x[1005];
        cin>>s;
        cin>>x;
        int count = 0;
        int len = strlen(x);
        for(int i=0;i<len;i++){
            if(s[i]!=x[i]){
                swap(x,i); 
                swap(x,i+1); 
                count ++ ;
            }
        }
        cout<<count<<endl;
        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

    10 时间加法

    在这里插入图片描述
    输出描述
    输出第一行包含一个整数,表示结果是几点。

    第二行包含一个整数,表示结果是几分。

    输入输出样例
    示例 1
    输入

    3
    20
    165
    
    • 1
    • 2
    • 3

    输出

    6
    5
    
    • 1
    • 2
    #include 
    #include 
    int main()
    {
      // 请在此输入您的代码
      int a,b,m,t;
      scanf("%d\n%d\n%d",&a,&b,&t);
      m=a*60+b+t;
      printf("%d\n%d",m/60,m%60);
      return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
  • 相关阅读:
    文举论金:黄金原油全面走势分析策略独家指导
    oraccle数据库常用函数
    如何在Linux机器上使用ssh远程连接Windows Server服务器
    PerfView专题 (第九篇):洞察 C# 中的 LOH 内存碎片化
    无人机+自组网:2U机架车载式自组网电台技术详解
    Springboot项目多模块打包jar移动到指定目录,docker打jar包构建镜像部署并运行
    ARM架构与编程 · 基于IMX6ULL
    mysql 8.0 命令行root无法登录
    【LeetCode:86. 分隔链表 | 链表】
    数据结构例题代码及其讲解-递归与树
  • 原文地址:https://blog.csdn.net/weixin_74774974/article/details/132994430