题目:

  输入一个正数n,输出所有和为n连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。

  继续做些题目,看到这是网易面试题,于是又认认真真自己思考着做了。




解决:

  结果一定是2个相连的数、3个相连的数、4个、5个等等。那么可以把这个数n除以i(i为2,3,4...代表相连的数的个数),得到的这些相邻的数的大概平均值,如当 n = 15、i = 2 时,n / i = 7,这代表如果有两个相邻的数的和是15,那么它们的大概平均值是7;i = 3 时,n / i = 5,代表三个连续的数的大概平均值是5,那么这三个数是4,5,6。大概平均值是因为整数除引起的。所以可以由相连数的个数得到这些数的大概平均值,从而可以得到这么多个相连的数,判断它们的和是否满足,不满足再看下一个相邻数的个数,直到相连数的第一个到了1。

  代码及结果:

 #include <iostream>

 using std::cin;
using std::cout;
using std::endl; void hs(int n)
{
if (n <= )
return; for (int ii = ;; ii++) // ii 代表结果由几个数字相加
{
int divisionRes = n / ii; //相当于 ii 个数的平均数
int thisSum = ;
int pS = divisionRes, pE = divisionRes; //两个指针
int pLS; //最左边的一个数 if (ii % ) //ii 是奇数
{
thisSum += pS;
pLS = divisionRes - (ii / );
}
else //ii 是偶数
{
pE++;
thisSum += (pS + pE);
pLS = divisionRes - (ii / ) + ;
} if (pLS < )
break; pS--, pE++; //上面的判断已经计算了最中心的了
while (pS >= pLS)
{
thisSum += (pE + pS);
pS--, pE++;
} if (thisSum == n)
{
pS++, pE--;
while (pS <= pE)
cout << pS++ << " ";
cout << endl;
}
}
} int main(void)
{
int t = ;
while (t--)
{
int n = rand() % ;
cout << n << endl;
hs(n);
cout << "-----------------------------------------------------------------------------\n";
}
cin.get();
}




注意:

  1:奇数个相连的数和偶数个相连的数的统一。

  2:相连的数边界的处理。

网易面试题:和为n连续正数序列的更多相关文章

  1. 【面试题041】和为s的两个数字VS和为s的连续正数序列

    [面试题041]和为s的两个数字VS和为s的连续正数序列 题目一:     输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,输出任意一对即可. ...

  2. 面试题57-II.和为s的连续正数序列

    面试题57-II.和为s的连续正数序列 1.题目 LeetCode-面试题57-II.和为s的连续正数序列 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数 ...

  3. LeetCode 题解 | 面试题57 - II. 和为s的连续正数序列

    题目描述 面试题57 - II. 和为s的连续正数序列 难度简单37收藏分享切换为英文关注反馈 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数). 序列内 ...

  4. 【剑指offer】面试题41:和为 s 的两个数字 VS 和为 s 的连续正数序列

    题目: 输出所有和为S的连续正数序列.序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序 思路: small代表序列最小数字,large代表序列最大数字.初始化small为1,large为2. ...

  5. 面试题41:和为s的两个数字 || 和为s的连续正数序列

    和为s的两个数字 题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,输出任意一对即可. 有点类似于夹逼的思想 注意两个int相加的和要用lo ...

  6. (剑指Offer)面试题41:和为s的连续正数序列

    题目: 输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数).例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1-5,,4-6和7-8. 思路: ...

  7. 面试题41:和为s的两个数字VS和为s的连续正数序列

    题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和为s,输出任意一对即可. vector<int> findNumberwWithSu ...

  8. 【编程题目】和为 n 连续正数序列

    51.和为 n 连续正数序列(数组).题目:输入一个正数 n,输出所有和为 n 连续正数序列.例如输入 15,由于 1+2+3+4+5=4+5+6=7+8=15,所以输出 3 个连续序列 1-5. 4 ...

  9. 和为S的两个数字VS和为s的连续正数序列

    题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,输出任意一对即可. 例如输入数组1.2.4.7.11.15和数字15.由于4+11=15, ...

随机推荐

  1. XCODE4.6从零开始添加视图

    转自:http://www.cnblogs.com/luoxs/archive/2012/09/23/2698995.html 对于很多初学者来说,肯定希望自己尝试不用傻瓜的“Single View ...

  2. 程序集、应用程序配置及App.config和YourSoft.exe.config .

    转自:http://www.cnblogs.com/luminji/archive/2010/10/21/1857339.html 什么是程序集 程序集标识属性 强名称的程序集 强名称工作原理 配置文 ...

  3. springMVC与struts2的区别

    1. 机制:spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同. 2. 性能:spring会稍微比struts快.spring mvc是基于方法的设 ...

  4. Golang学习 - sync 包

    ------------------------------------------------------------ 临时对象池 Pool 用于存储临时对象,它将使用完毕的对象存入对象池中,在需要 ...

  5. c++ 设计模式9 (Abstract Factory 抽象工厂模式)

    5.2 抽象工厂模式 动机:在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作:同时,由于需求的变化,往往存在更多系列对象的创建工作. 代码示例: 实现利用数据库的业务逻辑,支持多数据库(Sq ...

  6. UIScrollView做循环图片

    #import "ViewController.h" #define IMAGE_COUNT 6 @interface ViewController () { UIImageVie ...

  7. 每天一道面试题(2):实现strncpy

    目录 0. 为何要写strncpy? 1. 源码及测试结果 2. 面试注意事项 3. 小结

  8. 【阿里云产品公测】给ACE的建议

    作者:阿里云用户云想未来 今天给ace带来一些建议,首先,集群模式没什么好说的了,也不是新手用的,今天讲下单实例模式,建议ace开放独立ip购买,按天按月按年付费,收费可以5元左右,为什么这么说呢?其 ...

  9. (Android学习系列)二,窗口(Activity)的生命周期

    在Activity从创建到销毁的过程中需要在不同的阶段调用7个生命周期的方法这7个生命周期方法定义如下: protected void onCreate(Bundle savedInstanceSta ...

  10. C++复习笔记

    好多东西都忘了,现在重新复习一遍,把遇到的要点都记录下来.随时更新. 指针 C保证在为数组分配存储空间的时候,指向数组之后的第一个位置的指针也是合法的.也就是说保证指针 a + SIZE 是合法的,但 ...