蓝桥杯刷题——day5

蓝桥杯刷题——day5

  • 题目一
    • 题干
    • 解题思路一
    • 代码
    • 解题思路二
    • 代码
  • 题目二
    • 题干
    • 解题思路
    • 代码

题目一

题干

给定n个整数 a1,a2,⋯ ,an,求它们两两相乘再相加的和,即:
在这里插入图片描述
示例一:

输入:
4
1 3 6 9
输出:
117

题目链接:求和

解题思路一

初次看这个题目第一感觉是用两个双循环首先外循环的i从a1开始一直到an-1(n-1是下标),内层循环从i+1开始一直到an,然后设置一个sum用于接收他们的和,如此一来就完成了求和,下面是完整代码:

代码

import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int num = scanner.nextInt();int[] arr = new int[num];int i = 0;while (num > 0) {arr[i] = scanner.nextInt();num--;i++;}int sum = 0;for (int n = 0; n < arr.length - 1; n++) {for (int m = n + 1; m < arr.length; m++) {sum = sum + arr[n] * arr[m];}}System.out.println(sum);}
}

这个方法很容易想到,但是我们发现了此方法的时间复杂度是O(n),因此时间复杂度很大,如果用这个代码去提交我们就会发现并不能完全通过,因此需要找更简便的方法。

解题思路二

原题是:
在这里插入图片描述
提取公因式,我们可以化简为:
在这里插入图片描述
现在,我们要使用一种叫“前缀和”的方法,定义一个数组b,令bi=a1+a2+⋯+aj,很容易发现:
在这里插入图片描述
因此上述化简后的计算就可以化简为:
在这里插入图片描述
根据这个公式我们就能够完成求和,首先,我们创建另一个数组用于存储b,用一个for循环完成求和,下面是完整代码:

代码

import java.util.Scanner;
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int num = scanner.nextInt();long[] arr1 = new long[num];long[] arr2 = new long[num];int i = 0;while (num > 0) {arr1[i] = scanner.nextInt();num--;i++;}for (i = 0; i < arr2.length; i++) {if (i == 0) {arr2[i] = arr1[i];} else {arr2[i] = arr2[i - 1] + arr1[i];}}long sum = 0L;for (i = 0; i < arr1.length; i++) {sum = sum +arr1[i] * (arr2[arr2.length-1] - arr2[i]);}System.out.println(sum);}
}

题目二

题干

给定一个 8 位数的日期,请你计算该日期之后下一个回文日期和下一个ABABBABA型的回文日期各是哪一天。
示例一:

输入:
20200202
输出:
20211202
21211212

题目链接:回文日期

解题思路

这道题其实不难,只是考虑的东西很多,考察的就是看问题的严谨程度,首先我们要保证这个数的日期要是一个合法的日期,什么意思?月只能是1到12,而日的合法性更多,日根据月来定,比如一月是31天,四月是30天,并且还要判断闰年,因为闰年2月才是29天。因此我们可以创建一个函数判断日期是否合法。那么整体的思路就可以是,从输入的数字后一位开始逐一遍历,首先判断这个日期是否合法,如果日期合法再通过双指针判断是否是回文日期,如果是回文日期了,在判断该日期是否是ABABBABA型的回文日期。下面是完整代码:

代码

import java.util.Scanner;
public class Main {public static boolean check_data(int data) {int[] months = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};int year = data / 10000; //年int month = data % 10000 / 100; //月int day = data % 100; //日if (day == 0 || month <= 0 || month > 12) {return false;}if (month != 2 && day > months[month]) {return false;}if (month == 2) {//月份是2if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) if (day > 29) return false;//是闰月, day必须<=29else if (day > 28) return false;//是平月,day必须<=28}return true;}public static boolean check_huiwen(String s) {char[] arr = s.toCharArray();int len = s.length();for (int i = 0, j = len - 1; i < j; i++, j--)//i从前往后,j从后往前扫一遍if (arr[i] != arr[j]) {return false;//不对称,就不回文}return true;}public static boolean check_ABAB(String s) {char[] arr = s.toCharArray();if (check_huiwen(s)) {return arr[0] == arr[2] && arr[1] == arr[3] && arr[0] != arr[1];}return false;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int num = scanner.nextInt();boolean flag = false;for (int i = num + 1; i <= 99999999; i++) {//枚举回文数if (check_data(i)) {String s = String.valueOf(i);if (check_huiwen(s) && !flag) {System.out.println(i);flag = true;}if (check_ABAB(s)) {System.out.println(i);break;}}}}
}

check_data函数用于判断日期是否是合法日期,其中有一个值得注意的地方是,我是用数组来存储每个月份应该有的天数,这个也方便了我们用于if判断。check_huiwen函数是用于判断日期是否是回文日期,我用了前后两个指针进行比较i往前,j往后。check_ABAB函数是用于判断日期是否是ABABBABA的日期,我们知道如果是ABABBABA那么一定是回文,因此我们只需要判断第一个数跟第三个数是否一样,并且第二个数跟第四个数是否一样,并且第一个数跟第二个数不能一样(因为第一个数跟第二个数一样了,就变成了AAAAAAAA),有细心的同学会问哪个flag的目的是什么?我们知道题目要求打印第一个回文日期,那么我们设置一个flag,如果找到了我们就把flag致为true,而ABABBABA找到了之后直接跳出循环就可以了,问题解决。如果有什么问题或者想说的欢迎私信和评论,谢谢各位的点赞收藏。

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

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

相关文章

监测预警智能分析中心建设项目方案

随着科技的不断进步&#xff0c;地理信息与遥感技术在国家治理、环境保护、灾害预警等领域发挥着越来越重要的作用。监测预警智能分析中心的建设&#xff0c;旨在通过集成先进的遥感技术、地理信息系统&#xff08;GIS&#xff09;、大数据分析和人工智能&#xff08;AI&#x…

【漫话机器学习系列】009.词袋模型(Bag of Words)

词袋模型&#xff08;Bag of Words, 简称 BoW&#xff09; 词袋模型是一种常见的文本表示方法&#xff0c;主要用于自然语言处理&#xff08;NLP&#xff09;和信息检索领域。它将文本数据转换为特征向量&#xff0c;忽略语序&#xff0c;仅考虑词的出现与否或出现频率。 1. 基…

vue3 setup语法,子组件点击一个元素打印了这个元素的下标id,怎么传递给父组件,让父组件去使用

问&#xff1a; vue3 setup语法&#xff0c;子组件点击一个元素打印了这个元素的下标id&#xff0c;怎么传递给父组件&#xff0c;让父组件去使用 回答&#xff1a; 在 Vue 3 中&#xff0c;你可以使用 setup 语法糖和组合式 API 来实现子组件向父组件传递数据。具体来说&am…

分治算法(单选题)

2-1 分数 2 下列多少种排序算法用了分治法&#xff1f; 堆排序插入排序归并排序快速排序选择排序希尔排序 A.2 B.3 C.4 D.5 正确答案 A 2-2 分数 2 分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题&#xff0c;分别解决问题&#xff0c;最后将子…

【栈】栈的定义及基本操作

1. 栈的定义和特点 定义&#xff1a;栈是限定尽在表尾进行插入或删除操作的线性表。 表头元素成为栈底&#xff0c;表尾元素成为栈顶。 特点&#xff1a;后进先出&#xff08;先进后出&#xff09; 2. 顺序栈 顺序栈是利用顺序存储结构实现的栈&#xff0c;即用一组连续…

UNIX简史

从1991年Linux出现至今&#xff0c;由于众多IT巨头以及技术社区的推动&#xff0c;Linux已经成为非常成熟、可用于各种关键领域的操作系统&#xff0c;适当了解其发展历史&#xff0c;对于理顺其技术流派、从而更好地学习和使用Linux具有重要意义。由于其基于UNIX系统二十多年的…

C# OpenCV机器视觉:畸变矫正

在一个阳光明媚的早晨&#xff0c;阿强决定去拍照。他拿起相机&#xff0c;穿上他最喜欢的羊毛大衣&#xff0c;准备记录下生活中的美好瞬间。可是&#xff0c;当他兴奋地查看照片时&#xff0c;发现自己拍的每一张都像是被外星人用变形金刚的力量扭曲过一样&#xff01;“这是…

读书|关于马斯克

于我而言&#xff0c;马斯克是一个有魅力的人&#xff0c;他张扬嚣张、却又一直做着惊世骇俗的事情。 关于健康 马斯克本身的工作就十分忙碌&#xff0c;但早年的他生活习惯也极其不规律&#xff0c;睡眠不足、饮食糊弄、懒得运动。健康三要素一个不占。另外&#xff0c; 42 …

tryhackme——Defensive Security Intro(防御安全简介)

任务一&#xff1a;Introduction to Defensive Security防御安全简介 此room的两个要点&#xff1a; Preventing intrusions from occurring 防止入侵发生Detecting intrusions when they occur and responding properly 检测发生的入侵并正确响应 防御安全还有更多内容。 除上…

使用rust语言创建python模块(pyo3+maturin)

1. 首先使用conda创建python虚拟环境&#xff08;已创建的可省略&#xff09; >conda create --prefixE:\python_envs\rust_python python3.11 2. 激活python虚拟环境 conda activate rust_python 3. 安装maturin pip install maturin 4. 创建rust项目 >cd E:\py…

阿里云RAM实战详解

引言 阿里云RAM(Resource Access Management)是一款用于管理阿里云资源访问权限的服务。通过RAM,您可以为不同的用户分配不同的访问权限,确保资源的安全和可控。本文将详细介绍RAM的实战应用,结合最佳实践,帮助您更好地管理阿里云资源。 RAM的核心概念 在使用RAM之前,…

解锁CSS新维度:预处理器之LessSass

在现代前端开发中&#xff0c;CSS&#xff08;层叠样式表&#xff09;是用于控制网页外观的主要技术。然而&#xff0c;随着项目的复杂度增加&#xff0c;传统的CSS编写方式逐渐显现出其局限性&#xff0c;如变量复用、嵌套规则、模块化管理等需求难以满足。为此&#xff0c;出…

C++中函数的特性

文章目录 一、C中形参带默认值的函数二、C中的inline内联函数三、C中的inline内联函数和普通函数的区别四、C中函数重载五、C为什么支持函数重载六、C语言为什么无法实现函数重载 一、C中形参带默认值的函数 在C中&#xff0c;形参带默认值的函数是指在函数声明或定义时&#…

关于Postgresql旧版本安装

抛出问题 局点项目现场&#xff0c;要求对如下三类资产做安全加固&#xff0c;需要在公司侧搭建测试验证环境&#xff0c;故有此篇。 bclinux 8.2 tomcat-8.5.59 postgrel -11 随着PG迭代&#xff0c;老旧版本仅提供有限维护。如果想安装老版本可能就要费劲儿一些。现在&…

使用echarts实现3d柱状图+折线图

以下代码有问题请直接问国内直连GPT/Claude HTML 需要注意threeDchart一定要设置宽度高度&#xff0c;不然图不显示,然后echarts版本不要太低&#xff0c;不然也不显示 <div id"threeDchart" class"threeDchart"></div>js set3DBarChart2(dat…

2024.1212-02-虚拟私人网(VPN) 虚拟局域网 及隧道技术(四)--GRE47 Etherip97 原理及应用

虚拟局域网 及隧道技术&#xff08;四&#xff09;-GRE47 & Etherip97原理及应用 概述原理及应用EOIP/Etherip概念区别 隧道协议标准EtherIP &#xff08;IP protocol number 97&#xff09;GRE 开源工具katlogic-eoip 验证环境GRE&#xff08;EOIP&#xff09;演示验证Eth…

一个初始化bitmap的小算法

一个初始化bitmap小算法 根据长度&#xff0c;创建bitmap初始化bitmap 根据长度&#xff0c;创建bitmap 看到一个开源项目&#xff0c;利用bitmap存储数据&#xff0c;其中创建和初始化过程&#xff0c;比较经典。这里摘录出来&#xff0c;以备后续使用。代码采用的是golang …

【从零开始入门unity游戏开发之——C#篇01】理论开篇,理解什么是编程

文章目录 前言前置条件进制什么是十进制、二进制二进制有什么用&#xff1f;为什么计算机用二进制而不用十进制&#xff1f;二进制转十进制十进制转二进制二进制运算 计算机中的数据存储单位什么是编程&#xff1f;什么是代码&#xff1f;什么是编程语言&#xff1f;常见的编程…

黑盒白盒测试

任务1 黑盒测试之等价类划分法 【任务需求】 【问题】例&#xff1a;某报表处理系统要求用户输入处理报表的日期&#xff0c;日期限制在2003年1月至2008年12月&#xff0c;即系统只能对该段期间内的报表进行处理&#xff0c;如日期不在此范围内&#xff0c;则显示输入错误信息…

CSS学习记录11

CSS布局 - display属性 display属性是用于控制布局的最终要的CSS属性。display 属性规定是否/如何显示元素。每个HTML元素都有一个默认的display值&#xff0c;具体取决于它的元素类型。大多数元素的默认display值为block 或 inline。 块级元素&#xff08;block element&…