poj 2140 Herd Sums

#include <iostream>
using namespace std;
int main()
{
int i,n;
int counts=0;
scanf(
"%d",&n);
for(i=1;i<=n/2;i+=2) //当i=1表示只由原数单独构成
if(n%i==0)
counts
++;
if(n%2!=0)
counts
++;
printf(
"%d\n",counts);
return 0;
}
//只要是连续的数相加,则和 n 都可化成 一个奇数 i 乘以 某个数 a
//比如: 1+2+3+4 = 5 * 2 ( 5 =1+4 =2+3 ) , 1+2+3+4+5 = 3 * 5 ( 3为中间值 )
//2+3+4= 3 * 3 ,2+3+4+5= 7 * 2 ,所以可以根据 n % i ==0 判断是否匹配

//当和 n 是奇数时,比如 15=7+8= 15 * 1 ,上面的 a >=2 ,所以 i <=n/2 ,而这里的 a=1,i=n,故计数器要另外加上 1
//偶数就不用另外考虑这一点,因为两个相邻的数相加必定为奇

  

posted on 2011-07-18 11:40  sysu_mjc  阅读(157)  评论(0编辑  收藏  举报

导航