[蓝桥杯 2019 省 B] 等差数列

题目链接

[蓝桥杯 2019 省 B] 等差数列

题目描述

数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中 N N N 个整数。

现在给出这 N N N 个整数,小明想知道包含这 N N N 个整数的最短的等差数列有几项?

输入格式

输入的第一行包含一个整数 N N N

第二行包含 N N N 个整数 A 1 , A 2 , A 3 , . . . , A N A_1,A_2,A_3,...,A_N A1,A2,A3,...,AN。(注意 A 1 , A 2 , A 3 , . . . , A N A_1,A_2,A_3,...,A_N A1,A2,A3,...,AN 并不一定是按等差数列中的顺序给出 )。

输出格式

输出一个整数表示答案。

输入输出样例
输入

5
2 6 4 10 20

输出

10

提示

包含 2,6,4,10,20 的最短的等差数列是 2,4,6,8,10,12,14,16,18,20

数据范围
  • 2 ≤ N ≤ 1 0 5 2 \leq N \leq 10^5 2N105
  • 1 ≤ A i ≤ 1 0 9 1 \leq A_i \leq 10^9 1Ai109

解法:数学

对于一个等差数列,我们要使其项数越少 等价于 让公差 d d d 越大!

对于原数列,我们先将其从小到大排序,得到新数列 a = { a 1 , a 2 , a 3 , . . . , a N } a = \{ a_1,a_2,a_3,...,a_N \} a={a1,a2,a3,...,aN}

对于其中任意两项的差值 x = a i + 1 − a i x = a_{i + 1} - a_i x=ai+1ai,都应该是公差 d d d 的倍数,即 d ∣ x d | x dx d d d 能够整除 x x x

对于所有的这样的差值 x x x,我们要使得 公差 d d d 最大,等价于求其最大公约数 g g g

对于求出的最大公约数 g g g

  • 如果 g = 0 g = 0 g=0,说明公差 d = 0 d = 0 d=0,原数列所有元素都相等,故等差数列得长度就等于原数列的元素个数 N N N
  • 如果 g > 0 g > 0 g>0,那么等差数列的长度就为 1 + ( a N − a 1 ) / g 1 + (a_N - a_1) / g 1+(aNa1)/g

时间复杂度: O ( n ) O(n) O(n)

C++代码:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main(){
    int n;
    cin>>n;
    
    vector<int> a(n);
    for(int i = 0;i < n;i++) cin>>a[i];
    sort(a.begin(), a.end());
    
    int d = a[n - 1] - a[0], min_d = 0;
    for(int i = 0;i < n - 1;i++) min_d = __gcd(min_d, a[i + 1] - a[i]);
    
    int ans = 0;
    if(min_d) ans = 1 + d / min_d;
    else ans = n;
    
    cout<<ans<<'\n';
    return 0;
}

Java代码:

import java.util.*;
import java.io.*;

public class Main {
	static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	
	public static int gcd(int a, int b) {
		if(b == 0) return a;
		else return gcd(b, a % b);
	}
	
	public static void main(String[] args) throws Exception 
	{
		int n = Integer.parseInt(in.readLine().trim());
		int[] a = new int[n];
		
		String[] str = in.readLine().split(" ");
		for(int i = 0;i < n;i++) a[i] = Integer.parseInt(str[i]);
		
		Arrays.sort(a);
		
		int min_d = 0, d = a[n - 1] - a[0];
		for(int i = 0;i < n - 1;i++) {
			min_d = gcd(min_d, a[i + 1] - a[i]);
		}
		
		int ans = 0;
		if(min_d > 0) ans = 1 + d / min_d;
		else ans = n;
		
		System.out.println(ans);
	}
}

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

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

相关文章

【趣玩一下】StreamDiffusion一秒100张!实时生成二次元老婆照!

源代码 https://github.com/cumulo-autumn/StreamDiffusion 基础原理 首先Stream Batch&#xff0c;是将原来顺序的去噪步骤改为批量化处理。允许在一个批处理中&#xff0c;每幅图像处于去噪流程的不同阶段。 如此一来&#xff0c;可以大大减少UNet推理次数&#xff0c;显著…

【SQL】1321. 餐馆营业额变化增长(窗口函数rows between 、range between;DATEDIFF()函数)

前述 窗口函数相关知识推荐阅读&#xff1a; 通俗易懂的学会&#xff1a;SQL窗口函数 窗口函数rows between 、range between的使用 MySQL中的DATEDIFF()函数 mysql data类型的加减 常用函数&#xff1a; ROUND() 函数&#xff1a;用于将数值四舍五入到指定的小数位数。FLOO…

Python爬虫——scrapy-2

目录 scrapy简介 安装ipython 基本使用 访问百度 总结 scrapy简介 scrapy shell是Scrapy框架提供的一个交互式命令行工具&#xff0c;用于快速调试和测试Scrapy爬虫。它能够加载Scrapy项目的设置和爬虫代码&#xff0c;并提供一个交互式环境&#xff0c;可以在其中执行Scra…

云计算项目七:jump-server安装部署

jump-server安装部署 配置清单 jumpserver概述 Jumpserver是一款开源的堡垒机&#xff0c;可使系统的管理员和开发人员安全的连接到企业内部服务器上执行操作&#xff0c;并且支持大部分操作系统&#xff0c;是一款非常安全的远程连接工具 常见支持的系统 CentOS, RedHat, …

GNURadio+USRP+OFDM实现文件传输

文章目录 前言一、发送端1、参数配置1&#xff09;Random Source2&#xff09;stream to Tagged stream3&#xff09;Stream CRC324&#xff09;Protocol Formatter5&#xff09;Repack Bits6&#xff09;Virtual Sink7&#xff09;Chunks to Symbols8&#xff09;Tagged Strea…

关于装载类子系统

装载类子系统 类加载器字节码调节器类加载运行时数据区 类加载器 将class文件加载进jvm的方法去&#xff0c;并在方法去中创建一个java.lang.Class对象作为外界访问这个类的接口。实现这个动作的代码模块称为类加载器。 类加载器分类 启动类加载器&#xff08;Bootstrap C…

keycloak18.0.0==本地源码启动

github下载源码&#xff0c; 版本18.0.0 java和maven的版本如下 E:\keycloak-18.0.0>java -version java version "21.0.1" 2023-10-17 LTS Java(TM) SE Runtime Environment (build 21.0.112-LTS-29) Java HotSpot(TM) 64-Bit Server VM (build 21.0.112-LTS-…

EMC测试整改:提升产品合规性和市场竞争力?|深圳比创达电子

在当前的产品研发和制造领域&#xff0c;电磁兼容&#xff08;EMC&#xff09;测试是确保产品符合法规要求并能够在各种电磁环境下正常工作的重要环节。然而&#xff0c;很多企业在进行EMC测试时可能会遇到一些问题和不合格情况&#xff0c;因此需要进行整改来提升产品的合规性…

leetcode 热题 100_合并区间

题解一&#xff1a; 排序&#xff1a;先将区间按左边界从小到大进行排序&#xff0c;假设排序后a区间在b区间之前&#xff0c;根据a区间右边界和b区间左边界的大小判断是否重叠&#xff0c;如果重叠则将区间合并为一个。考虑到区间完全处于另一区间内的情况&#xff0c;合并时应…

一个数据库表格缺少自动增加的字段导致添加一条数据失败

一个数据库表格缺少自动增加的字段导致添加一条数据失败。最近要整理出一个cms网站源程序&#xff0c;因此新建了一个目录&#xff0c;将需要的文件复制到该目录。复制好以后&#xff0c;试用的时候发现添加留言失败。经过数小时的查找原因&#xff0c;最后找到原因&#xff0c…

JVM-类加载机制

名词解释 *.class文件的结构 查看指令&#xff1a; javap -verbose hello.class 包含信息&#xff1a; 结构信息&#xff08;版本号&#xff0c;大小信息&#xff09;&#xff1b; 元数据&#xff08;类&#xff0c;继承&#xff0c;接口&#xff0c;字段声明&#xff0c;方法声…

如何使用宝塔面板搭建Discuz并结合cpolar实现远程访问本地论坛

文章目录 前言1.安装基础环境2.一键部署Discuz3.安装cpolar工具4.配置域名访问Discuz5.固定域名公网地址6.配置Discuz论坛 前言 Crossday Discuz! Board&#xff08;以下简称 Discuz!&#xff09;是一套通用的社区论坛软件系统&#xff0c;用户可以在不需要任何编程的基础上&a…

京东大佬教你剖析软件测试的底层逻辑

写这篇文章&#xff0c;是希望把我的一些我认为是非常有价值的经验总结出来&#xff0c;能够帮助刚做测试不久的新同事&#xff0c;或者是测试经验丰富的老同事以共享。 希望我们可爱的新同事&#xff0c;准备要在测试领域耕耘的伙伴&#xff0c;能够通过我的文章了解到测试的底…

哪吒监控:开源、轻量、易用的服务器监控、运维工具(内附主题美化代码)

哪吒监控是一款开源、轻量、易用的服务器监控、运维工具,为用户提供了一系列强大的功能和便捷的操作方式。 一键安装:支持一键脚本安装面板和监控服务,适用于Linux、Windows、MacOS、OpenWRT等主流系统,让您轻松上手。 实时监控:能够同时监控多个服务器的系统状态,包括…

Linux --- 应用层 | HTTP | HTTPS

前言 前面写的TCP/UDP客户端在访问服务端的时候&#xff0c;需要输入ip地址和端口号才可以访问&#xff0c; 但在现实中&#xff0c;我们访问一个网站是直接输入的一个域名&#xff0c;而不是使用的ip地址端口号。 比如在访问百度 https://www.baidu.com/的时候&#xff0c; …

Linux安装

安装方式介绍 Linux系统的安装方式&#xff0c;主要包含以下两种&#xff1a; 方式概述场景物理机安装直接将操作系统安装到服务器硬件上企业开发中&#xff0c;我们使用的服务器基本都是采用这种方式虚拟机安装通过虚拟机软件安装我们在学习阶段&#xff0c;没有自己服务器&a…

GraphQL

从表中查询10条数据 {user_info(_limit: 100) {idname} }根据id查询数据 {user_info(_where: {id: 1727515006802587648}_order_by: {create_time: _desc}_limit: 10) {idname} }外键联表查询(特别注意写法:update_by.id): {speaker_info(update_by.id: {_eq: 1729043650301…

修改MonkeyDev默认配置适配Xcode15

上一篇文章介绍了升级Xcode15后,适配MonkeyDev的一些操作,具体操作可以查看:Xcode 15 适配 MonkeyDev。 但是每次新建项目都要去修改那些配置,浪费时间和精力,这篇文章主要介绍如何修改MonkeyDev的默认配置,做到一次修改永久生效。 MonkeyDev的默认安装路径是在/opt/Mo…

STM32第九课:ADC单通道模数转换

一、ADC简介 ADC是Analog-to-DigitalConverter的缩写。指模/数转换器或者模拟/数字转换器。是指将连续变量的模拟信号转换为离散的数字信号的器件。典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。 STM32f103 系列有3个ADC&#xff0c;精度为12位&#xf…