Skip to content

Latest commit

 

History

History
95 lines (81 loc) · 1.74 KB

2020年05月09日-每m翻转数列,最终求前n和.md

File metadata and controls

95 lines (81 loc) · 1.74 KB
问题:
小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
解决思路:
  1. for循环1到n

  2. 循环中维护两个字段判断是不是需要翻转

  3. 将循环中的结果相加,得到结果

代码:
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);

	}

}