题解 | #行星观测#
行星观测
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); } }