________________2058_______________后台数据不够。可能误判。

//正确的代码。
#include<stdio.h>
#include<math.h>
int main()
{
    __int64 n,m,i,j,s,l,l1;
    while(scanf("%I64d%I64d",&n,&m)&&(n||m))//这个是短路运算符所以需要在n和m之间加一个括号。
    {
        l=sqrt(m*2);//理解为最长的情况下有几个连续数字之和可以为l//我感觉这里只是为了保险而已所以*2.如果不*2的话会约去小数。
        for(s=0;l>0;l--)
        {
            l1=m-(l-1)*l/2;
            if(l1%l==0)//判断首项(l1=a1*l)是不是在n内,如果在n内的话(首项是有整数l和a1得到的)将其除以l可以整除,就说明a1是整数
            {
                if(l1/l+l-1>n)
                    continue;
                printf("[%I64d,%I64d]
",l1/l,l1/l+l-1);
                s=1;
            }
            
        }
        printf("
");
    }
}
//错误的代码
#include<stdio.h>
#include<math.h>
int main()
{
    __int64 n,m,i,j,s,l,l1;
    while(scanf("%I64d%I64d",&n,&m)&&(n||m))//这个是短路运算符所以需要在n和m之间加一个括号。
    {
        l=sqrt(m*2);//理解为最长的情况下有几个连续数字之和可以为l//我感觉这里只是为了保险而已所以*2.如果不*2的话会约去小数。
        for(s=0;l>0;l--)
        {
            l1=m-(l-1)*l/2;
            if(l1%l==0)//判断首项(l1=a1*l)是不是在n内,如果在n内的话(首项是有整数l和a1得到的)将其除以l可以整除,就说明a1是整数
            {
                //if(l1/l+l-1>n)
                //    continue;
                printf("[%I64d,%I64d]
",l1/l,l1/l+l-1);
                s=1;
            }
            
        }
        printf("
");
    }
}

后台数据不够,导致误判。例如输入5 15

原文地址:https://www.cnblogs.com/A-FM/p/4994300.html