________________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]\n",l1/l,l1/l+l-1); s=1; } } printf("\n"); } }
//错误的代码 #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]\n",l1/l,l1/l+l-1); s=1; } } printf("\n"); } }
后台数据不够,导致误判。例如输入5 15