首页 > 试题广场 >

行星观测

[编程题]行星观测
  • 热度指数:3313 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

科学家正在计划利用 行星上的一个研究模块进行一项重要的测量实验,测量共分为两次进行。

因为宇宙中有多种不确定因素,科学家们已经确定了最佳测量的时间在 l 到 r 范围内。

测量的要求是两次测量的间隔时间必须是 a 的倍数,现在请你帮助科学家计算测量方式的数量。

即有多少对测量时间整数 i 和 j 满足 l <= i < j <= r ,并且 j-i 是 a 的倍数。

进阶:空间复杂度 ,时间复杂度

输入描述:
输入共三行,从上到下三个数字分别代表 


输出描述:
在一行中输出测量方式的数量
示例1

输入

1
5
2

输出

4

说明

(1,3)、(1,5)、(2,4)和(3,5)共4个    
示例2

输入

4
9
6

输出

0

说明

一个能满足的都没有    
这样·数据小的可以,大数循环就不行
Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();
        int temp;
        int count = 0;
        for (int i = a; i < b ;i++) {
            for (int j = b;j > i;j--){
                if (j==i) continue;
                temp = (j-i)%c;
                if (temp == 0){
                    count++;
                }
            }
        }
        System.out.println(count);


发表于 2023-05-10 11:08:25 回复(0)
// 通过了,不能使用for和int,解析写在题解了
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        Long begin = scanner.nextLong();
        Long end = scanner.nextLong();
        Long interval = scanner.nextLong();
        end = end - begin;
        begin = 0L;
        Long count = end/interval;
        Long sumStart = end - count*interval + 1;
        Long sumStop = end - interval + 1;
        // 等差数列前n项和
        Long result = (sumStart+sumStop)*count/2;
        System.out.println(result);
    }
}

编辑于 2021-09-16 10:36:55 回复(0)