zoukankan      html  css  js  c++  java
  • hdu

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

    求1-N多少个连续字段和等于M.

    假设 从i开始长度为k的字段和等于M,那么 ( i+  i+k-1) * k/2=M即(2*i+k-1)*k==2M   那么 从k<= sqrt(2*M);

    i=M/k-(k-1)/2.这样通过从大到小枚举k的长度,并同时计算i的值判断和是否等于M,输出即可.

    注意从(2*i+k-1)*k==2M这个式子得出的是k<=sqrt(2*M)而不是i,这样是为了方便计算,并且从大到小枚举k,也保证输出是按顺序输出。

     1 #include<stdio.h>
     2 #include<math.h>
     3 int main()
     4 {
     5     int n,m,l,k;
     6     while(scanf("%d %d",&n,&m)!=EOF&&n||m)
     7     {
     8         l=(int)sqrt(double(2*m));
     9         while(l)
    10         {
    11             k=m/l-(l-1)/2;
    12             if(k*l+l*(l-1)/2==m)
    13                 printf("[%d,%d]
    ",k,k+l-1);
    14             l--;
    15         }
    16         printf("
    ");
    17     }
    18     return 0;
    19 }
  • 相关阅读:
    将帅问题
    堆栈(链栈)
    堆栈(基础实现原理 顺序栈)
    双向链表
    冒泡排序 (泛型版)
    maven
    jboss数据源配置
    仓库介绍,nexus的安装
    mave聚合继承
    mac mysql 安装
  • 原文地址:https://www.cnblogs.com/nowandforever/p/4566860.html
Copyright © 2011-2022 走看看