题目描述:

小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
 
输入描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序

分析:

假设 i,j 分别是第一个数和最后一个数,那么根据 (i+j)*(j-i+1)/2=sum 可得 i+j-i^2+j^2=2*sum 。遍历i从1到sum/2,求j。
由于 j+j^2=2*sum-i^2-i ,所以 j 可能取 floor(sqrt(2*sum-i^2-i)) ,如果 j 可取,则将 i 到 j 加入数组中。

代码:

 class Solution {
public:
vector<vector<int> > FindContinuousSequence(int sum) {
vector<vector<int> > seqs;
for(int i = ; i <= (sum >> ); i++) {
int j = floor(sqrt((sum << ) + i * i - i));
if(i < j && i + j - i * i + j * j == (sum << )) {
vector<int> seq;
for(int k = i; k <= j; k++)
seq.push_back(k);
seqs.push_back(seq);
}
}
return seqs;
}
};

最新文章

  1. iOS开发系列--C语言之构造类型
  2. IO(二)----字符流
  3. 【leetcode】Convert Sorted List to Binary Search Tree (middle)
  4. Windows Store App 全球化:在后台代码中引用字符串资源
  5. iOS大神牛人的博客集合
  6. WPF快速入门系列(1)——WPF布局概览
  7. hdu1358 KMP
  8. 【Android测试】【第三节】ADB——源码浅谈
  9. oracle 序列 ,check约束
  10. printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - 输出格式转换函数
  11. DedeCms密码解密[转]
  12. hdu--1018--Big Number(斯特林公式)
  13. navicat for sqlite 11.1.12 patch 永久试用 不报毒
  14. UIScrollView&amp;nbsp;UIPageViewControlle…
  15. Elastic 之倒排索引(二)
  16. P4843 清理雪道
  17. 在URL地址中传值
  18. 在Win7环境下安装启动Linux
  19. 关于Unity屏幕分辨率的比例
  20. C语言数组指针(指向数组的指针)

热门文章

  1. linux 无外网情况下安装 mysql
  2. python模块之XlsxWriter 详解
  3. ubuntu下刷新dns
  4. Python入门教程 超详细1小时学会Python
  5. 嵌入式linux性能详解_转
  6. Android应用双击返回键退出
  7. java调用kettle_实现(2)
  8. 2015 Multi-University Training Contest 5 1009 MZL&#39;s Border
  9. [JS] 页面回车键提交表单-常用于登录页面
  10. [mysql] Navicat for mysql_导入导出表结构