# 题目描述
给你一个正整数 n
,找出满足下述条件的 中枢整数 x
:
- 1 和
x
之间的所有元素之和等于x
和n
之间所有元素之和。
返回中枢整数 x
。如果不存在中枢整数,则返回 -1 。题目保证对于给定的输入,至多存在一个中枢整数。
提示:
1 <= n <= 1000
# 测试用例
用例1:
- 输入:
n = 8
- 输出:6
- 解释:6 是中枢整数,因为 1 + 2 + 3 + 4 + 5 + 6 = 6 + 7 + 8 = 21 。
用例2:
- 输入:
n = 1
- 输出:1
- 解释:1 是中枢整数,因为 1 = 1 。
用例3:
- 输入:
n = 4
- 输出:-1
- 解释:可以证明不存在满足题目要求的整数。
# 代码实现
/**
* @param {number} n
* @return {number}
*/
// 输入
var __readline = require("readline-sync");
__readline.setDefaultOptions({ prompt: "" });
var readline = __readline.prompt;
console.log("请输入n: ");
const n = Number(readline());
var pivotInteger = function (n) {
// 1 2 3 4
// 先求1到n的和 }
var sum = 0;
for (let i = 1; i <= n; i++) {
sum += i;
}
// 从后往前去掉元素
// 要减的值
let gap = 0;
for (let i = n; i >= 1; i--) {
let preVal = sum - gap;
// console.log("preVal: ", preVal);
gap += i;
let postVal = gap;
// console.log("postVal: ", postVal);
if (preVal === postVal) {
return i;
}
}
return -1;
};
const res = pivotInteger(n);
console.log("结果为: ", res);
/*
请输入n:
1
结果为: 1
*/
/*
请输入n:
8
结果为: 6
*/
/*
请输入n:
5
结果为: -1
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63