标签:
//错误代码如下: #include<stdio.h> #include<math.h> int main() { int i,n,m,k,t,s; while(scanf("%d%d",&n,&m)&&(n||m)) { s=(int)sqrt((double)2*m); if(n<s) k=n; else k=s; for(;k>=0;k--) if(m*2%(k+1)==0) { t=m*2/(k+1)-k; if(t%2==0&&t>0&&t<=2*n) { // if(t/2+k>n) // continue; printf("[%d,%d]\n",t/2,t/2+k); } } printf("\n"); } }
//正确代码: /*咋说来: 做出来的方法是一个一个条件 慢慢减少 运算的步骤。 1:首先找出最长的那个连续之和的长度是多少。如果n和应该是多少的比较誰最小就选谁。 2: */ #include<stdio.h> #include<math.h> int main() { int i,n,m,k,t,s; while(scanf("%d%d",&n,&m)&&(n||m)) { s=(int)sqrt((double)2*m); if(n<s) k=n; else k=s; for(;k>=0;k--) if(m*2%(k+1)==0) { t=m*2/(k+1)-k; if(t%2==0&&t>0&&t<=2*n) { if(t/2+k>n) continue; printf("[%d,%d]\n",t/2,t/2+k); } } printf("\n"); } }
标签:
原文地址:http://www.cnblogs.com/A-FM/p/4994300.html