解题思路:

注意事项:

参考代码:

import java.util.Arrays;
import java.util.Scanner;

/**
 * 数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一 部分的数列,只记得其中 N 个整数。
 * 现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有几项?
 */
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr= new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }
        Arrays.sort(arr); // 排序
        // 求各差的最大公约数即可
        int[] diff = new int[n - 1];
        for (int i = 0; i < n - 1; i++) {
            diff[i] = arr[i + 1] - arr[i];
        }
        if (arr[0] == arr[n - 1]){
            System.out.println(n);
            return;
        }
        int temp = 0;
        for (int i = 0; i < n - 2; i++) {
            temp = gcd(diff[i], diff[i + 1]);
            diff[i + 1] = temp;
        }
        System.out.println((arr[n-1] - arr[0]) / temp + 1);

    }
    public static int gcd(int a, int b){
        return b == 0 ? a : gcd(b, a % b);
    }
}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论