如: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个整数之和。
Consecutive sum
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 589 Accepted Submission(s): 268
15 1050
3 11
#include<stdio.h>
int main(void)
{
int n,max,i,sum,b;
double a;
while(scanf("%d",&n)!=EOF)
{
sum=0;
for(i=1;i<=n;i++)
{sum+=i;if(sum>n)
{break;}}
max=i-1;sum=0;
for(i=2;i<=max;i++)
{
a=(n-(i*(i-1)/2.0))/(i/1.0);//亮点...求首项,首项存在就可以.
b=(int)a;
if(a==b)
{sum++;}
}
printf("%d\n",sum);
}
return 0;