Secuencia aritmética de grupo java-c de la décima Copa Blue Bridge

1. Descripción del problema: el
profesor de matemáticas le hizo a Xiao Ming una pregunta sobre la suma de series aritméticas. Pero el descuidado Xiao Ming olvidó parte de la secuencia, solo los N números enteros. Ahora, dados estos N números enteros, Xiao Ming quiere saber cuántos elementos hay en la secuencia aritmética más corta que contiene estos N números enteros.
[Formato de entrada]
La primera línea de entrada contiene un número entero N. La segunda línea contiene N números enteros A1, A2, ..., AN. (Tenga en cuenta que A1 ∼ AN no se dan necesariamente en el orden de la secuencia aritmética)
[Formato de
salida ] Genera un número entero para representar la respuesta.
[Entrada de muestra] 5 2 6 4 10 20
[Salida de muestra] 10
[Descripción de muestra]
La secuencia aritmética más corta que contiene 2, 6, 4, 10, 20 es 2, 4, 6, 8, 10, 12, 14, 16, 18, 20.
[Escala y convención de
casos de uso de evaluación ] Para todos los casos de uso de evaluación, 2≤ N ≤100000, 0≤ Ai ≤10 ^ 9.

2. Análisis de pensamiento:

Una forma más fácil de pensar es ordenar estos N enteros primero, y luego usar la lista para registrar la diferencia entre dos elementos adyacentes en el ciclo después de ordenar, y luego debemos elegir la diferencia más pequeña de estas diferencias (debe ser La la diferencia más pequeña puede constituir una secuencia aritmética), y finalmente a partir de esta diferencia más pequeña, juzgue si todos los elementos en la lista de diferencias de dos elementos adyacentes registrados antes pueden ser divisibles por la diferencia más pequeña actual, si se encuentra El elemento no puede ser divisible por la diferencia más pequeña actual, por lo que la diferencia debe reducirse aún más hasta que se encuentre un valor que pueda ser divisible por todas las diferencias en la lista. Es posible que la tolerancia final sea igual a 0, por lo que calculamos la tolerancia más pequeña al principio y encontramos que es 0, solo emite N directamente, de lo contrario, de acuerdo con la fórmula an = a1 + (n-1) * d para resuelva para d, enumere principalmente un proceso. Algunas preguntas reales de la Blue Bridge Cup se pueden enviar en el sitio web en idioma c

3. El código es el siguiente:

import math
if __name__ == '__main__':
    # 首先需要求解出这个序列中最小的差值
    n = int(input())
    nums = list(map(int, input().split()))
    nums.sort()
    cha = list()
    for i in range(1, n):
        cha.append(nums[i] - nums[i - 1])
    min_cha = math.pow(10, 9) + 1
    for i in range(len(cha)):
        min_cha = min(min_cha, cha[i])
    if min_cha == 0: print(n)
    else:
        dengcha = 1
        for i in range(min_cha, 0, -1):
            f = 1
            for j in range(len(cha)):
                if cha[j] % i != 0:
                    f = 0
                    break
            if f:
                dengcha = min_cha
                break
        # 根据an与a1的关系可知
        print((nums[-1] - nums[0]) // dengcha + 1)

 

Supongo que te gusta

Origin blog.csdn.net/qq_39445165/article/details/115033425
Recomendado
Clasificación