78这个数可以表示为连续正整数的和 18+19+20+21,25+26+27。输入一个正整数 n(n<=10000),输出 m 行(n有m种表示法),每行是两个正整数a,b,表示a+(a+1)+...+b=n,对于多种表示法,a小的方案先输出。 C++
时间: 2023-12-20 11:03:18 浏览: 90
C++初学者之根据输入的任何一个正整数,输出可能被表示的连续正整数
以下是 C++ 代码实现:
```cpp
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int m = 0;
for (int i = 1; i * (i + 1) / 2 <= n; i++) {
if ((n - i * (i + 1) / 2) % (i + 1) == 0) {
int a = (n - i * (i + 1) / 2) / (i + 1);
cout << a << " " << a + i << endl;
m++;
}
}
if (m == 0) {
cout << "No solution" << endl;
}
return 0;
}
```
思路解析:
首先,我们可以知道,对于一个正整数 n,最多可以表示为 n 个连续正整数的和,即 1 + 2 + 3 + ... + n。因此,我们可以枚举其中一个连续正整数的起始值 i,然后计算出该连续正整数的和 sum = i + (i+1) + ... + j,其中 j 是和为 n 的最大正整数。接下来,我们只需要判断 (n-sum) 是否能被 (j-i+1) 整除,如果能,则可以表示为 (n-sum)/(j-i+1) 个连续正整数的和。最后,我们将所有的方案输出即可。如果没有任何方案,则输出 "No solution"。
阅读全文