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

文章目录

    • 前言
    • 题目
    • 分析
    • 算法
    • 难度
    • 实战
      • 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整除就算作一个子数组,最后返回满足规则中的子数组个数即可。该试题为【蓝桥杯】简单试题,这也告诉我们在做题的时候应该读懂题目意思,能够看起来字数多的题目其实很简单。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件测试员----面试,你准备好了么?

最近有机会做一些面试工作&#xff0c;主要负责面试软件测试人员招聘的技术面试。 之前一直是应聘者的角色&#xff0c;经历了不少次的面试之后&#xff0c;多少也积累一点面试的经验&#xff0c;现在发生了角色转变。初次的面试就碰到个工作年限比我长的&#xff0c;也没有时间…

【jvm系列-04】精通运行时数据区共享区域---堆

JVM系列整体栏目 内容链接地址【一】初识虚拟机与java虚拟机https://blog.csdn.net/zhenghuishengq/article/details/129544460【二】jvm的类加载子系统以及jclasslib的基本使用https://blog.csdn.net/zhenghuishengq/article/details/129610963【三】运行时私有区域之虚拟机栈…

罗丹明-聚乙二醇-生物素RB-PEG-Biotin;Biotin-PEG-Rhodamine,PEG2000

RB-PEG-Biotin 罗丹明-聚乙二醇-生物素 中文名称&#xff1a;罗丹明-聚乙二醇-生物素 英文名称&#xff1a;RB-PEG-Biotin 分子量&#xff08;PEG &#xff09;&#xff1a;2000、3400、5000&#xff0c;其他分子量可以定制。 用 途&#xff1a;仅供科研实验使用。 性状&…

不会注册ChatGPT?4个国内网站让你尽情体验

最近火出圈的科技新词非“ChatGPT”莫属了。 但是由于ChatGPT注册起来比较困难&#xff0c;我到现在都还学不会如何注册.... 但是&#xff01;世上无难事&#xff01;只要有心人&#xff01; 我千辛万苦终于找到几个ChatGPT平替的网站了。 AI中文智能对话 地址&#xff1a;…

DPDK入门(环境搭建以及小demo)

文章目录零、从0开始配置dpdk环境的虚拟机一、dpdk的编译usertool/dpdk-setup.sh二、dpdk需要什么配置来支持1.多队列网卡2.巨页三、解析接收网络数据的过程经历了什么1.物理网卡2.NIC3.内核协议栈4.标准接口层Posix API5. 应用层上述过程发生的拷贝四、DPDK介绍基于上述接收网…

人人看得懂的AI教程

人人看得懂的AI教程&#xff0c;从0开始入门AI教程&#xff0c;一步一步AI&#xff0c;人工智能学习笔记 现在写书真的方便&#xff0c;闲来无事写了本从0开始学AI的书籍&#xff0c;哈哈 一、基础知识 1.1 人工智能概览 1.2 机器学习 1.3 深度学习 1.4 数据科学 二、编程知…

chatGPT中文版入口-chatGPT不可以用的地区

ChatGPT老出现不可用 如果您在使用ChatGPT时发现它经常不可用&#xff0c;可能是由于以下原因&#xff1a; OpenAI API的服务不稳定。由于技术问题、网络问题或维护&#xff08;如软件更新&#xff09;等原因导致OpenAI API服务不稳定&#xff0c;会导致ChatGPT无法使用。 接…

2345看图王阻止文件删除和U盘弹出 - 解决方案

2345看图王阻止文件删除和U盘弹出 - 解决方案前言2345看图王解决方案临时方案永久方案前言 用户在使用2345看图王查看图片后&#xff0c;可能会出现图片文件/文件夹无法删除或U盘无法弹出等问题&#xff0c;这是因为2345看图王的辅助模块正在占用图片文件&#xff0c;因此无法…

VS2022下载安装与基本使用(写C语言)

最近遇到一种问题&#xff0c;就是想要写一写C语言的代码&#xff0c;但是网页编辑器功能不全&#xff0c;GCC需要安装Liunx系统&#xff0c;VS又体量太大过于复杂&#xff0c;用keil又需要连接硬件&#xff0c;所以比较纠结。 工作中通常使用的是Keil&#xff0c;但是如果有时…

Nginx实现会话保持,集群模式下session域共享

前言 生产环境下&#xff0c;多数系统为了应对线上多种复杂情况而进行了集群架构的部署&#xff0c;保证系统的高性能、价格有效性、可伸缩性、高可用性等。通常将生产环境下的域名指向Nginx服务&#xff0c;通过它做HTTP协议的Web负载均衡。 session是什么 在计算机中&…

8万字智慧旅游景区信息化建设方案word

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。 1.1. 整体建设框架 XXXXXX智慧景区旅游建设对于全面整合景区旅游资源&#xff0c;提升景区旅游产业发展能级&#xff0c;进一步增强景区旅游业的核心竞争力具有十分重要的支…

【Python搞笑游戏】因蔡徐坤打篮球动作超火,被某程序员写成了一款游戏,画面美到不敢看,成功学到了精髓~(附源码免费)

导语 之前网络最火的梗&#xff0c;非“C徐坤打篮球”莫属。个人感觉&#xff0c;只有多年前的“春哥纯爷们”堪与匹敌&#xff01; 虽然说C徐坤打篮球是一个老梗了&#xff0c;但是确实非常搞笑&#xff0c;今天就跟着小编一起来回忆一下吧&#xff01; “我是练习两年半的…

SQL SERVER调Web Service时候权限错误的解决

日期 2023/4/15 18:00:00 日志 作业历史记录 (AIPACS) 步骤 ID 1 服务器 GOOGLE 作业名称 AIPACS 步骤名称 RUNWS 持续时间 00:00:00 SQL 严重性 16 SQL 消息 ID 15281 已通过电子邮件通知的操作员 已通过…

江苏三年制专转本法学类考纲配套课程网课题库

江苏三年制专转本法学类考纲配套课程网课题库1、江苏专转本的考试科目都有哪些&#xff1f; 2022年开始江苏专转本成绩主要由语文/数学英语/日语专业课三科的成绩构成&#xff0c;满分500分。分别给大家解释一下 语文/数学&#xff1a;满分150分&#xff08;文科考语文&#xf…

C++ -3- 类和对象 (中) | 拷贝构造函数 赋值运算符重载

文章目录 4.拷贝构造函数什么是拷贝构造函数&#xff1f;应用——示例&#xff1a;日期计算器什么情况下需要自己实现拷贝构造函数&#xff1f; 5.赋值运算符重载运算符重载&#xff08;重要&#xff09;赋值运算符重载 拷贝构造函数和赋值重载函数 4.拷贝构造函数 什么是拷贝…

Vue2 API-源码解析

目录 Vue.extend(option) delimiters functional Vue.component(id, Function | Object) Vue.directive( id, [definition] ) Vue.filter( id, function) Vue.nextTick() Vue.set() Vue.delete(target, index/key) Vue.compile(template) Vue.observable(object) …

一文讲解系统性能分析之|iowait是什么?

我们对系统性能进行优化时&#xff0c;一般会使用 top 命令来查看系统负载和系统中各个进程的运行情况&#xff0c;从而找出影响系统性能的因素。如下图所示&#xff1a; top top 命令会输出很多系统相关的信息&#xff0c;如&#xff1a;系统负载、系统中的进程数、CPU使用率…

四十六、docker-compose部署

一个项目肯定包含多个容器&#xff0c;每个容器都手动单独部署肯定费时费力。docker-compose可以通过脚本来批量构建镜像和启动容器&#xff0c;快速的部署项目。 使用docker-compose部署主要是编写docker-compose.yml脚本。 一、项目结构 不论是Dockerfile还是docker-compo…

实验室汇报汇报汇报

1、kafka是什么 Producer&#xff1a;即生产者&#xff0c;消息的产生者&#xff0c;是消息的入口&#xff1b;Consumer&#xff1a;消费者&#xff0c;即消息的消费方&#xff0c;是消息的出口&#xff1b;Broker&#xff1a;中间代理&#xff0c;即一个broker就是一个server。…

接口优化的常见方案实战总结

一、背景 针对老项目&#xff0c;去年做了许多降本增效的事情&#xff0c;其中发现最多的就是接口耗时过长的问题&#xff0c;就集中搞了一次接口性能优化。本文将给小伙伴们分享一下接口优化的通用方案。 &#xfeff; &#xfeff; &#xfeff;&#xfeff; 二、接口优化…