原题目
完整代码
//双指针
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main(){
int m;
while(~scanf("%d",&m))
{
int fro=1,rear=1,sum=0;
while(rear<=m)//当后指针值大于给定值停止,即最小自然数和大于m时停止
{
if(sum<m)//如果连续数和小于给定值,往后加值,后指针后移一位
{
sum+=rear;rear++;
}
else if(sum>m)//如果连续数和小于给定值,往前减值,前指针后移一位
{
sum-=fro;fro++;
}
else//等于给定值,输出区间,继续往后加值,后指针后移一位
{
printf("%d %d\n",fro,rear-1);
sum+=rear;rear++;
}
}
}
}