题意:求一个数n可以分成多少个<=n的连续的数相加得到。如10可以分成10和1+2+3+4共2种可能;15可以分成 15, 7+8, 4+5+6, and 1+2+3+4+5。(2853完全相同)
思路:想想可知如果n由偶数个(设为k个)连续数相加得到,则n/k必然等于x.5;如果n由奇数个(设为k个)连续数相加得到,则n/k必然得到整数。再考虑k的最大值,也就是从1开始的连续数字,那么k*(k+1)/2>n的k就无需考虑了。
#include <stdio.h> #include <string.h> int n; int main(){ int i,res=0; scanf("%d",&n); for(i = 1;i*(i+1)/2<=n;i++){ if(i&1 && n%i==0) res++; if(!(i&1) && (n%i==i/2)) res++; } printf("%d\n",res); }
#include <stdio.h> #include <string.h> int n,T; int main(){ int i,j,res=0; scanf("%d",&T); while(T--){ scanf("%d %d",&j,&n); for(res=0,i = 2;i*(i+1)/2<=n;i++){ if(i&1 && n%i==0) res++; if(!(i&1) && (n%i==i/2)) res++; } printf("%d %d\n",j,res); } }