小Q定义了一种数列称为翻转数列: 给定整数n和m, 满足n能被2m整除。对于一串连续递增整数数列1, 2, 3, 4..., 每隔m个符号翻转一次, 最初符号为'-';。 例如n = 8, m = 2, 数列就是: -1, -2, +3, +4, -5, -6, +7, +8. 而n = 4, m = 1, 数列就是: -1, +2, -3, + 4. 小Q现在希望你能帮他算算前n项和为多少。
输入包括两个整数n和m(2 <= n <= 109, 1 <= m), 并且满足n能被2m整除。
输出一个整数, 表示前n项和。
8 2
8
for循环1到n
循环中维护两个字段判断是不是需要翻转
将循环中的结果相加,得到结果
package answer20200331; import java.util.Arrays; public class Test { public static void main(String[] args) { int n = 8; int m = 2; // 是否是负数 boolean isMinus = true; // 当isNeedUpdate等于m修改isMinus int isNeedUpdate = 0; // 最后结果 int result = 0; if (n % (2 * m) != 0) { System.out.println("n 不能被 2m 整除"); return; } int[] resultArr = new int[n]; for (int i = 0; i < n; i++) { if (isMinus) { resultArr[i] = (i + 1) * -1; } else { resultArr[i] = i + 1; } if (++isNeedUpdate == m) { if (isMinus) { isMinus = false; } else { isMinus = true; } isNeedUpdate = 0; } result += resultArr[i]; } System.out.println(Arrays.toString(resultArr)); System.out.println(result); } }