求区间和可以考虑前缀和,但本题特殊之处在于是等差序列, 可以用等差数列求和公式求得区间和,这样可以节约空间, 要求区间至少有两个数, 所以结果在 n / 2 以内, 最后用双指针同向扫描一遍即可。
for (int i = 1, j = 1; i <= n / 2; i++) { while (j <= n / 2 && sum(i, j) < n) j++; if (sum(i, j) == n) std::cout << i << ' ' << j << endl; }