题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1868
题意:给1个整数n,表示成连续整数的和,看有几种方法。
如:15 = 1+2+3+4+5 = 4+5+6 = 7+8,结果为3。
设n可以表示成i个连续整数之和,首项为a,则n=a+(a+1)+……(a+i-1)=i*a+(1+2+……+(i-1))=i*a+(i*(i-1)/2)
-->a=(n-(i*(i-1)/2))/i
所以我们可以按当前程度i从可能的最大长度k到2(若15=15也算则到1)去试,若能求得首项为整数(可以
通过是否能整除判断),则可以表示成i个整数之和。
那么可能的最大长度k如何求?显然,当从1开始加时长度可能到最大。所以若1+2+……+k>=n则k为可能的最
大长度。这么做效率差些,但比较容易理解。
Hdu 2058也可以用类似方法求解。
很多问题,写写画画,可能就比较有想法了。光一个脑袋空想,很可能要多浪费好些时间。