您的位置:首页 > 其它

hdu 2058 The sum problem

2012-08-03 18:24 309 查看
点击打开链接

//这种题用暴力肯定会超时,题目的突破点就是相邻的值相差值是相等的,利用等差数列公式sum=a1*n+(n-1)*n/2

//知道到a1=1时,n是最大的,也就是sqrt(2*m),从最大的开始,每次减1,来求a1的值,a1=(sum/n)-(n-1)/2, 在把a1和n代进去,看是否相等

#include"stdio.h"
#include"math.h"
int main()
{
int n,m,a1,nn;
while(scanf("%d%d",&n,&m)!=EOF&&(n||m))
{
nn=(int)sqrt(2.0*m);
while(nn)
{
a1=m/nn-(nn-1)/2;
if(a1*nn+(nn-1)*nn/2==m)
printf("[%d,%d]\n",a1,nn+a1-1);
nn--;
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: