【转】http://zhedahht.blog.163.com/blog/static/25411174200732711051101/
题目:输入一个正数n,输出所有和为n连续正数序列。
例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。
分析:这是网易的一道面试题。
这道题和本面试题系列的第10题有些类似。我们用两个数small和big分别表示序列的最小值和最大值。首先把small初始化为1,big初始化为2。如果从small到big的序列的和大于n的话,我们向右移动small,相当于从序列中去掉较小的数字。如果从small到big的序列的和小于n的话,我们向右移动big,相当于向序列中添加big的下一个数字。一直到small等于(1+n)/2,因为序列至少要有两个数字。
基于这个思路,我们可以写出如下代码:
void PrintContinuousSequence(int small, int big);
/////////////////////////////////////////////////////////////////////////
// Find continuous sequence, whose sum is n
/////////////////////////////////////////////////////////////////////////
void FindContinuousSequence(int n)
{
if(n < 3)
return;
int small = 1;
int big = 2;
int middle = (1 + n) / 2;
int sum = small + big;
while(small < middle)
{
// we are lucky and find the sequence
if(sum == n)
PrintContinuousSequence(small, big);
// if the current sum is greater than n,
// move small forward
while(sum > n)
{
sum -= small;
small ++;
// we are lucky and find the sequence
if(sum == n)
PrintContinuousSequence(small, big);
}
// move big forward
big ++;
sum += big;
}
}
/////////////////////////////////////////////////////////////////////////
// Print continuous sequence between small and big
/////////////////////////////////////////////////////////////////////////
void PrintContinuousSequence(int small, int big)
{
for(int i = small; i <= big; ++ i)
printf("%d ", i);
printf("\n");
}
分享到:
相关推荐
和为n连续正数序列 - **知识点**: 数学规律、滑动窗口。 - **应用场景**: 找出所有和为n的连续正数序列(至少包括两个数)。 ### 27. 二元树的深度 - **知识点**: 二叉树的递归遍历、高度计算。 - **应用场景**:...
本题目的核心在于如何高效地找到一个序列中所有连续子序列的最大和。如果序列中的所有元素都是负数,则最大子段和定义为0。 ### 题目解析 #### 输入格式 输入首先给出一个整数`C`(`C ),表示后续有`C`组测试数据...
1.5.10. 输入一个正数 n,输出所有和为 n 连续正数序列 ................................125 1.6. 面试题集合(五) .......................................................................................126...
在IT领域,特别是算法设计和分析中,"连续子序列最大和与乘积问题"是一个经典的话题。这类问题经常出现在数据结构和算法的面试中,也是优化和解决复杂计算问题的关键。本文将深入探讨这个问题,并结合提供的Java源码...
- **和为n连续正数序列**:可以使用滑动窗口的方法来解决。 - **二元树的深度**:使用递归来计算二叉树的深度。 - **字符串的排列**:可以通过递归的方法生成所有可能的排列。 - **调整数组顺序使奇数位于偶数前面**...
### Oracle数据库中序列的使用 在Oracle数据库管理中,序列是一种非常实用的对象,它能够自动生成唯一的数值。这种特性使得序列在很多应用...正确地理解和应用序列功能,可以帮助开发者构建更加健壮和高效的应用程序。
使用list,最简短的代码,输入一个正数n,输出所有和为n的连续正数序列,结果添加到list中
57.和为S的连续正数序列 Array 关注 58.翻转单词序列 String 58.左旋转字符串 String 59.滑动窗口的最大值 Queue 常考 60.n个骰子的点数 61.扑克牌顺子 62.孩子们的游戏 Math 63.股票的最大利润 Math 64.求1...
该算法旨在解决在包含正数和负数的序列中找到具有最大和的连续子序列。 描述中提到的“给定整数:A1 A2 A3 A4 … An,其中可能有负数,求Ai-Aj的和的最大值。”这进一步阐述了问题的具体要求,即输入是一个整数数组...
离散时间信号,简称为序列,是指在时间上不连续的一系列数据点,通常用x(n)或{x(n)}表示,其中n为整数。这类信号可以来源于对连续时间信号的等间隔采样,如音频、视频信号等,也可以是本身即为离散的数据,如金融...
本题目要求解决的问题是“最大子数组和问题”,即给定一个整数序列{a1, a2, …, an}(这些整数可以为正数也可以为负数),我们需要找到一个连续的子序列,使得这个子序列的所有元素之和最大,并返回这个最大和。...
在度量空间中,一个序列称为Cauchy序列,如果对于任意正数ε,存在某个正整数N,使得当n, m > N时,序列中的任意两个元素之间的距离小于ε。在题目中,证明了如果11lim0nnnxx,即数列{}nx的极限为0,那么{}nx不一定...
题目10则是在正数等比数列的背景下,构造了一个新的数列{b_n},通过求解b_n的通项公式及前n项和,进一步求得数列{b_n}的前n项和。 总的来说,这个课时作业涵盖了等比数列的基础知识,包括等比数列的定义、性质、通...
- 该实验还涉及到一种线性递推关系`f(n) = f(n-1) - 2*f(n-2) + f(n-3)`,用于寻找序列中的最大值、最小值和所有数的和。通过for循环,计算每个f(n)的值,并更新最大值和最小值,同时累加到总和中。在给定的序列...
1. 初始化`$maxProduct`和`$minProduct`为数组的第一个元素,`$result`为当前最大乘积。 2. 遍历数组`$nums`从第二个元素开始: a. 计算当前元素与`$maxProduct`和`$minProduct`的乘积。 b. 更新`$maxProduct`和`$...
3. **等比数列的前n项和**:等比数列的前n项和公式为\(S_n = \frac{a_1(1 - q^n)}{1 - q}\),前提条件是公比q不等于1。如果q=1,则\(S_n = na_1\)。 4. **等比数列的性质**: - 等比数列的任意连续三项a_k, a_{k+1...
等差数列的前n项和可以用公式Sn=n*a1计算,当公差d=0时,序列变为常数序列,和即为n乘以第一项。 等比数列则是由一个常数q(公比)定义的序列,它的特点是任意相邻两项之间的比例是恒定的。比如,序列a1, a1q, a1q^...
我们需要计算所有长度为N的二进制序列的L的平均值(期望)。对于这个问题,可以通过动态规划或者直接计算概率的方式解决。例如,当序列以0结尾时,L为0;以1结尾时,L至少为1,且后续可能出现0或1,因此期望值需要...
- Cauchy准则:如果一个序列满足Cauchy准则,即对任何正数ε,都存在正整数N,使得所有大于N的两项之差的绝对值小于ε,那么这个序列收敛。 以上是对标题“极限与连续”中涉及的主要知识点的详细解释,涵盖了一些...