【蓝桥杯】数组中存在K倍区间的子数组个数

news2024/11/15 18:53:45

文章目录

    • 前言
    • 题目
    • 分析
    • 算法
    • 难度
    • 实战
      • 1、创建算法
      • 2、创建测试用例
      • 3、运行测试用例
      • 4、测试结果
    • 总结

前言

蓝桥杯全国软件和信息技术专业人才大赛由工业和信息化部人才交流中心主办,每年参赛人数超过30000人。蓝桥杯大赛作为国内领先的全国性 IT 学习赛事,持续有力支撑综合测评、奖学金评定、升学考研,是高等教育教学改革和创新人才培养的重要竞赛项目。接上次算法解析,今天继续逐一从简到难安排解析各大编程算法题。
在这里插入图片描述

题目

给定一个长度为N的数列,A1, A2, … AN,如果其中一段连续的子序列Ai, Ai+1, … Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。
你能求出数列中总共有多少个K倍区间吗?
输入格式
第一行包含两个整数N和K。(1 <= N, K <= 100000)
以下N行每行包含一个整数Ai。(1 <= Ai <= 100000)
输出格式
输出一个整数,代表K倍区间的数目。
样例输入
5 2
1
2
3
4
5
样例输出
6

分析

1、根据题意我们可以确定问题是计算n个长度的数组中连续一个或多个元素之和是k倍的子数组个数,说直白点就是计算连续一个或多个元素之和是K的倍数,这些元素组成另一个数组,最后计算可以组合成满足规则的数组个数即可。比如题目数组{1,2,3,4,5} 5个元素可以组成被2整除的连续子数组6个。

算法

1、数组中每个元素都有可能被K整除,也都有可能与后续元素组成能够被K整除的集合,故我们必须保证每个元素要进行逻辑判断。那么,依次循环每个元素并验证即可以保证此步骤。
2、接上一步,每个元素先判断是否能被K整除,能够则可以组成一个元素的子数组,此时总的子数组+1;由于题目要求必须连续一个或几个元素之和是K的倍数,那么我们依次用当前元素与后续的所有元素进行组合,每组合一个元素则判断一次是否满足规则,满足规则总的子数组+1,不满足规则继续组合。
3、当每个元素全部依次与后续元素组合验证后,最后的总的子数组树即是我们这个数组能被K整除的所有情况。

难度

难度较为简单,星级 ★

实战

该题为蓝桥杯简单试题,我们本次实战用JAVA语言演示。题目输入5 2 则是5个元素的数组组成能够被2整除的子数组个数,后续12345则是数组元素;输出我们直接控制台打印,为保证测试效果我们每次都打印出满足规则的子数组。

1、创建算法

/**
 * k倍区间
 * @param n 数组长度
 * @param k 除数
 * @param array 数组
 * @author senfel
 * @date 2023/4/12 12:45 
 * @return int
 */
public static int compute(int n,int k,int[] array){
    int count = 0;
    if(array.length == 0 || array.length != n){
        return count;
    }
    //题目意思就是 n个元素的数组中连续元素之和为k的倍数一共有几组,一个元素为k倍也算
    for(int i=0;i<n;i++){
        if(array[i] % k == 0){
            //如果当前元素能够被k整除也算作一种
            count++;
            System.err.println("满足条件的集合:["+array[i]+"]");
        }
        //依次组合i+1到n个元素
        //每个组合sum
        int sum = array[i];
        String str = array[i]+"";
        for(int j = i+1;j<n;j++){
            sum+=array[j];
            str = str + "," + array[j];
            if(sum % k == 0){
                //多个连续元素组合能够被k整除
                count++;
                System.err.println("满足条件的集合:["+str+"]");
            }
        }
    }
   return count;
}

2、创建测试用例

@SpringBootTest
class DemoApplicationTests {

    /**
     * 计算K倍区间测试用例
     * @author senfel
     * @date 2023/4/12 12:47
     * @return void
     */
    @Test
    void range() throws Exception {
        //创建一个Scanner,控制台会一直等待输入,直到敲回车键结束,把所输入的内容传给Scanner,作为扫描对象。
        Scanner sc=new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        int array[] = new int[n];
        for(int i=0;i<n;i++){
            array[i] = sc.nextInt();
        }
        sc.close();
        System.err.println("控制台输入n:"+n+",k:"+k+",数组数据:"+Arrays.toString(array));
        //默认数组方式
        //int[] array = {1,2,3,4,5};
        //int compute = RangeDemo.compute(5, 2, array);
        int compute = RangeDemo.compute(n, k, array);
        System.err.println("满足条件的集合总数:"+compute);
    }

}

3、运行测试用例

控制台输入:
5 2
1
2
3
4
5

4、测试结果

见证奇迹的时刻

控制台输入n:5,k:2,数组数据:[1, 2, 3, 4, 5]
满足条件的集合:[1,2,3]
满足条件的集合:[1,2,3,4]
满足条件的集合:[2]
满足条件的集合:[2,3,4,5]
满足条件的集合:[3,4,5]
满足条件的集合:[4]
满足条件的集合总数:6

总结

K倍区间这个试题较为简单,题目可以说的比较复杂,其实读明白了就是数组中一个多个连续的元素之和能够被K整除就算作一个子数组,最后返回满足规则中的子数组个数即可。该试题为【蓝桥杯】简单试题,这也告诉我们在做题的时候应该读懂题目意思,能够看起来字数多的题目其实很简单。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/431594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python爬虫自动化从入门到精通第9天(爬虫数据的存储)

爬虫数据的存储 数据存储概述MongDB数据库的概念MongDB的安装使用PyMongo库存储到数据库 数据存储概述 通常&#xff0c;从网页爬取到的数据需要进行分析、处理或格式化&#xff0c;然后进行持久化存储&#xff0c;以备后续使用。数据存储主要有以下两种方式&#xff1a; 1&am…

启动kafka报错ERROR Fatal error during KafkaServer startup. Prepare to shutdown

一、错误 报的错&#xff1a; ERROR Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer) kafka.common.InconsistentBrokerIdException: Configured broker.id 0 doesn’t match stored broker.id Some(1) in meta.properties. If you m…

跟ChatGPT聊天、需求润色优化,禅道OpenAI 插件发布

禅道插件上新了&#xff0c;OpenAI 禅道集成&#xff0c;可提供神奇海螺聊天、需求润色功能。 神奇海螺 “章鱼哥&#xff0c;你为什么不问问神奇海螺呢&#xff1f;”——海绵宝宝 那么&#xff0c;就让我们问一问神奇 海螺吧&#xff01;禅道上线神奇海螺功能&#xff0c;…

【C++】优先级队列,反向迭代器

文章目录 priority_queue的介绍和使用priority_queue的使用 反向迭代器 priority_queue的介绍和使用 优先队列是一种容器适配器&#xff0c;根据严格的弱排序标准&#xff0c;它的第一个元素总是它所包含的元素中最大的。此上下文类似于堆&#xff0c;在堆中可以随时插入元素&a…

数据分析之Pandas 基础入门

一、初始Pandas pandas 是数据分析三大件之一&#xff0c;是Python的核心分析库&#xff0c;它提供了快捷、灵活、明确的数据结构&#xff0c;它能够简单、直观、快速的处理各种类型的数据结构。 pandas 支持的数据结构如下&#xff1a; SQL 或Excel 类似的数据有序或无序的…

后端程序员必须学会的编辑器vim

vim编辑器使用小结 1. vim简介 Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器&#xff0c;在Vi的基础上改进和增加了很多特性。VIM是自由软件。Vim普遍被推崇为类Vi编辑器中最好的一个&#xff0c;事实上真正的劲敌来自Emacs的不同变体。1999 年Emacs被选为Lin…

MyBatis(十一)、MyBatis查询语句专题

准备工作&#xff1a; 模块名&#xff1a;mybatis-007-select 打包方式&#xff1a;jar 引入依赖&#xff1a;mysql驱动依赖、mybatis依赖、logback依赖、junit依赖。 引入配置文件&#xff1a;jdbc.properties、mybatis-config.xml、logback.xml 创建pojo类&#xff1a;Car 创…

SQL sever数据库----基础增删改查操作与where条件限制

where条件限制方法 在SQL sever中使用where语句&#xff0c;可以对各种操作添加限制条件 基础格式为 ———————— where 逻辑表达式 例如限制条件的查询 select 范围 from 表名 where 逻辑表达式 逻辑表达式就是一个判断 如 a > 5 、a6>9、a>5 and b>5 各种…

k8s部署流水账

久仰大名k8s&#xff0c;业余选手一直望而却步。最近终于初步炮制成功。知道了大概的流程。本篇为部署备忘录。 经过的大环节有&#xff1a;修改树莓派/boot/cmdline.txt甚至/cmd/config.txt里面的集群相关设置&#xff0c;把cgroup驱动enable好。swap关掉。这些都是所有集群内…

比较几种热门Hybrid App前端框架

作为一种既能够在原生应用程序环境中运行&#xff0c;也能够在 Web 浏览器中运行的应用程序&#xff0c;Hybrid App 主要使用 Web 技术进行开发&#xff0c;如 HTML、CSS 和JavaScript&#xff0c;并使用一个中间层将其封装在原生应用程序中。随着技术的持续推进&#xff0c;Hy…

3.3栈和队列的应用

3.3.1括号匹配问题 IDE可视化的编程环境 作为一名程序开发人员&#xff0c;不管你使用哪门语言开发都有很多可以选择的集成开发环境IDE&#xff08;Integrated Development Environment&#xff09;&#xff0c;IDE是提供程序开发环境的应用程序&#xff0c;一般包括代码编辑器…

程序员挣够了钱,到中年失业真的很可怕吗?

借用最近很火的一张图&#xff0c;看看没有工作&#xff0c;你手里的存款够用几年&#xff08;按每年年化3.5%&#xff0c;利息继续放入理财计算&#xff09;&#xff1a; 如果每年花销在10万左右&#xff08;折合每个月8333元&#xff0c;应该是比较富足的&#xff09;&#x…

字节跳动高频 “ 120道 ” 软件测试面试题解析

1、web测试和APP测试的区别&#xff1f; web测试和APP测试都离不开测试的基础知识和测试原理。 不同点是&#xff1a;web 测试更多的是考虑自身功能和浏览器兼容&#xff0c;app 测试要考虑手机本身固有的属性&#xff0c;所以 app 测试还需要注意以下几点&#xff1a; 中断…

FreeRTOS 事件组

实现功能&#xff0c;当任务A,B完成后执行串口任务。 不同任务用不同的位表示 configUSE_16_BIT_TICKS1,bitx(0~7)&#xff1b; configUSE_16_BIT_TICKS设置为0 &#xff0c;bitx(0~23)&#xff1b; //串口任务的头文件 #ifndef __TRANSMIT_H #define __TRANSMIT_H#include…

nVisual创建机柜流程

一、制作机柜 1.先在绘图软件中把机柜画出来 2.把机柜导出一张SVG格式的图片 二、创建机柜 1.打开nVisual右上角点击管理选择模型库 2.选择设备点击新增&#xff0c; 依次录入机柜品牌、型号、宽高深等基础数据&#xff0c; 再上传相应的前视图&#xff08;在系统里展示…

自学python有推荐的么

大学生自学那必然是首推B站大学哇能称之为大学不是没有道理的&#xff0c;看看各个领域的学习分享都是非常多的&#xff0c;关键是看着弹幕就感觉像是在和一帮志同道合的小伙伴一起学习&#xff0c;自学的道路也不再孤单了&#xff0c;遇见不会的没准还能在弹幕和评论区找到答案…

TensorFlow详解3举个cnn卷积栗子

一、实现简单的cnn卷积神经网络 实现简单的cnn卷积神经网络&#xff08;用到的是MNIST手写数字的数据库yann.lecun.com/exdb/mnist&#xff09; 用到激活函数&#xff1a; 二、步骤 输入端是28281这样的一张图片&#xff0c;就是一张黑白的图片&#xff08;假如他是一张彩色…

Cat入门学习笔记整理

Cat入门学习笔记整理链路调用追踪介绍链路调用监控实现过程简析常见的链路追踪框架CAT报表介绍Transaction报表Event报表Problem报表Heartbeat报表Business报表Cat实战docker安装客户端集成API介绍Transaction扩展APIEventMetricCAT监控界面介绍DashBoardTransactionEventProbl…

C++ 构造函数与析构函数

1.构造函数的引出 一个实实在在的对象&#xff0c;应该有合法的属性&#xff0c;而不是在对象出来之后&#xff0c;再去设置属性&#xff0c;要实现这个过程&#xff0c;必须在对象出来的这一时刻初始化合法的值&#xff0c;而且不能由程序员调用&#xff0c;要给属性合法的值&…

熟悉requests用法,实现简单网站爬虫

本文模拟的是前后端分离项目&#xff0c;使用账号密码登录获取到token&#xff0c;拿着token加载用户信息&#xff0c;加载分页列表数据并存储文件。 本文用到的知识点&#xff1a; 1、urllib.parse URL解析&#xff1b; 2、session用法&#xff0c;保存所有请求在一个会话中&a…