P1147 连续自然数和

原题目

P1147 连续自然数和_第1张图片

完整代码

//双指针
#include
#include
#include
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++;
            }
        }
    }
}

你可能感兴趣的:(枚举)