zoukankan      html  css  js  c++  java
  • hdu 1868

    http://acm.hdu.edu.cn/showproblem.php?pid=1868

    没想出来盗用别人的思路:

    如: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个整数之和。

    #include"stdio.h"


    int main( )
    {
      int n,i,max,count;
      __int64 sum;
      double a;
      while(~scanf("%d",&n))
      {
        sum=0;
        for(i=1;i<=n;i++)//找出最多有多少个项连续的和;
        {
          sum+=i;
          if(sum>n)
            break;
        }
        max=i-1;sum=count=0;
        for(i=2;i<=max;i++)
        {
          a=(n-(i*(i-1))/2.0)/(i*1.0);//看首项是否存在;
          if((int)(a+0.5)==a)
          count++;
        }
        printf("%d\n",count);
      }
    return 0;
    }

  • 相关阅读:
    转载:通过Servlet生成验证码
    转载:web工程中URL地址的推荐写法
    使用Git上传本地项目代码到github
    $watch 和 $apply
    平时用的sublime插件
    zTree.js
    js
    npm install详解
    git
    git基础
  • 原文地址:https://www.cnblogs.com/chaosheng/p/2511022.html
Copyright © 2011-2022 走看看