题解 | #行星观测#
行星观测
http://www.nowcoder.com/questionTerminal/4ca3ba00cd4547088707a34f02f5d44f
// 通过了,这道题int型太小无法覆盖用例,用for循环易超时
// 找规律发现了为:等差数列前N项和的问题
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();
// 转成 0 - > 某个数 方便计算
end = end - begin;
begin = 0L;
// 计算间隔个数
Long count = end/interval;
// 找规律发现的 最小 最大 起始项
// 例如 0-9 间隔2 此时个数count= end/interval = 9/2=4
// 起始:9-4*2+1=2 终止 9-2+1=8
// 此时相当于求等差数列 2 4 6 8 个数4 计算result总和
// 为什么是这样的:本例间隔为2的倍数->
// 间隔2的有 [0,2][1,3]...[7,9] 9-2*1+1=8个
// 间隔4的有 [0,4][1,5]...[5,9] 9-2*2+1=6个
// 间隔6的有 [0,6][1,7][2,8][7,9] 9-2*3+1=4个
// 间隔8的有 [0,8] [1,9] 9-2*4+1=2个
// 间隔超过8的不存在了,此时刚好有count = end/interval = 9/2 = 4项,已计算起始项:2 终止项:8
// 求2->8 间隔2的等差数列 其他的情况也是一样
Long sumStart = end - count*interval + 1;
Long sumStop = end - interval + 1;
// 等差数列前n项和
Long result = (sumStart+sumStop)*count/2;
System.out.println(result);
}
} 