题目大意:
给一个数字N,写一段程序计算连续整数相加等于N的方法数。比如15, 7+8, 4+5+6, and 1+2+3+4+5.
解题思路:
n=a+a+1+a+2+…+a+k 的情况总数
n=(k+1)*a+(k+1)*k/2=(k+1)(a+k/2)
n为整数,k+1为整数,(a+k/2)为整数,k为偶数,k+1为奇数
当n和k+1确定时,a为定值
故解为n的奇因子个数
代码如下:
#include<stdio.h>
int main()
{
long n;
long cnt,count;
while(scanf("%d",&n)!=EOF)
{
count=1;
for(cnt=2;(2*n-cnt*cnt+cnt)>0&&(2*n-cnt*cnt+cnt)>=2*cnt;cnt++)
if((2*n-cnt*cnt+cnt)%(2*cnt)==0)
count++;
printf("%d\n",count);
}
return 0;
}
1191

被折叠的 条评论
为什么被折叠?



