78这个数可以表示为连续正整数的和 18+19+20+21,25+26+27。输入一个正整数 n(n<=10000),输出 m 行(n有m种表示法),每行是两个正整数a,b,表示a+(a+1)+...+b=n,对于多种表示法,a小的方案先输出。 输入描述 一行一个正整数n 输出描述 m行,每行都是两个正整数,表示区间 样例1 输入 78 输出 1 12 18 21 25 27 提示c++完成不能用函数
时间: 2024-01-03 10:03:04 浏览: 77
很抱歉,我之前的回答中没有包含完整的代码,这里提供一份C++代码,希望能对您有所帮助:
```
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n;
int left = 1, right = 2, sum = 3;
vector<vector<int>> res;
while (left < right) {
if (sum < n) {
right++;
sum += right;
} else if (sum > n) {
sum -= left;
left++;
} else {
vector<int> temp;
for (int i = left; i <= right; i++) {
temp.push_back(i);
}
res.push_back(temp);
sum -= left;
left++;
}
}
for (int i = 0; i < res.size(); i++) {
cout << res[i][0] << " " << res[i][res[i].size()-1] << endl;
}
return 0;
}
```
这份代码中,我们使用了一个二维vector来保存所有符合条件的区间。在while循环中,我们不断寻找符合条件的区间,如果找到了一个符合条件的区间,就将其保存到res中。最后,我们遍历res输出所有保存的符合条件的区间即可。
阅读全文