C++ 实现连续正整数求和:分解正整数为连续序列
C++ 代码实现:将正整数分解为连续正整数的和
本代码实现将一个正整数分解为连续正整数的和,并按起始数字递增输出所有可能的序列。
输入描述 一行一个正整数 n (n <= 10000)
输出描述 m 行,每行都是两个正整数,表示区间内容:和为 n 的连续正整数序列的起始数字和结束数字,按起始数字递增输出。
示例
输入 15
输出 1 5 4 6 7 8
代码实现
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
// 遍历所有可能的起始数字 a
for (int a = 1; a <= n / 2; ++a) {
// 计算结束数字 b
int b = a + (n - a * (a + 1) / 2) / a - 1;
// 判断 b 是否为整数
if (b * (b + 1) / 2 - a * (a + 1) / 2 == n) {
cout << a << ' ' << b << endl;
}
}
return 0;
}
代码解释
- 遍历所有可能的起始数字
a,从 1 到n/2。 - 根据等差数列求和公式,计算结束数字
b:b = a + (n - a * (a + 1) / 2) / a - 1 - 判断
b是否为整数,如果b * (b + 1) / 2 - a * (a + 1) / 2 == n,则说明a到b之间的连续正整数的和等于n,输出a和b。
注意
- 该代码只适用于
n为正整数的情况。 - 如果
n过大,代码可能会运行较慢。 - 可以根据需要进行优化和改进。
原文地址: https://www.cveoy.top/t/topic/opVv 著作权归作者所有。请勿转载和采集!