`
java-mans
  • 浏览: 11742432 次
文章分类
社区版块
存档分类
最新评论

【100题】第五十一题 和为n连续正数序列

 
阅读更多

一,题目

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

二,思路

解法一:连续正序列,不包含n本身。所以子序列中最大元素为 n/2+1

求出到前 i个元素和保存到b数组中,然后遍历数组b ,i>j 时,求b[i] –b[j] ==n。如果等于则输出 j+1 到 I 的序列。

时间复杂度:O(n^2)

#include <iostream>
using namespace std;

void print(int a[],int j,int i)
{
	for(int k=j;k<=i;++k)
		cout<<a[k]<<" ";
	cout<<endl;
}
int main()
{
	int n=15;
	int a[n];
	int b[n];
	for(int i=1;i<=n/2+1;++i)
		a[i]=i;


    b[0]=a[0]=0;
    
    for(int i=1;i<=n/2+1;++i)
	{
		b[i]=b[i-1] + a[i];
	}
	
	
	for(int i=n/2+1;i>=0;--i)
	{
		for(int j=i-1;j>=0;--j)
		{
				
			if((b[i]-b[j])==n)
			{
				print(a,j+1,i);
			}
		}
	}
	
}


解法二:

我们可用两个数smallbig分别表示序列的最小值和最大值。

首先把small初始化为1big初始化为2
如果从smallbig的序列的和大于n的话,我们向右移动small,相当于从序列中去掉较小的数字。
如果从smallbig的序列的和小于n的话,我们向右移动big,相当于向序列中添加big的下一个数字。
一直到small等于(1+n)/2,因为序列至少要有两个数字。

#include <iostream>
using namespace std;

void PrintContinuousSequence(int small, int big)
{
      for(int i = small; i <= big; ++ i)
            printf("%d ", i);
      printf("\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)
      {
            if(sum == n)
                  PrintContinuousSequence(small, big);
            // if the current sum is greater than n, 
            // move small forward
            while(sum > n)//元素偏大 
            {
                  sum -= small;
                  small ++;
                  if(sum == n)
                        PrintContinuousSequence(small, big);
            }
            // move big forward
            big ++;
            sum += big;
      }
}

int main()
{
	FindContinuousSequence(15);
}



分享到:
评论

相关推荐

    四川省七年级数学第一次月考试题(无答案) 试题.doc

    这份文档是四川省七年级的一次数学月考试题,包含了选择题、填空题和计算题。以下是基于题目内容解析的一些重要知识点: 1. **有理数的概念与分类**: - 选择题第2题涉及有理数的分类,包括自然数、分数和负有理数...

    湖南省耒阳市七年级数学上学期第一次段考试题 新人教版 试题.doc

    13. 简便计算:第二十一题的解答部分需要用到加减乘除运算的简便方法,比如分配律和结合律。 14. 乘法分配律与简便计算:第二十二题要求用简便方法计算,可能涉及乘法分配律的应用。 15. 数轴上点的排序:第二十三...

    七年级数学有理数综合测试题.doc

    【计算器操作】第五题要求输入数字103,键入顺序应为先输入1,再输入0,最后输入3。 【数的性质】在第六题中,需要识别相反数、绝对值以及符号的规则。-(-3)是3的相反数,所以A错误;+(-3)是-3,-(-3)是3,B错误;-...

    2020年广东佛山南海区小升初数学真题及答案.doc

    5. **不等式**:选择题第五题讨论了不等式a÷b(a、b均不为零),这涉及到数的大小比较。 6. **长度单位换算**:第六题是长度单位的转换,米到厘米的换算。 7. **数的认识**:第七题纠正了关于数的常见误解,强调...

    2020_2021学年高中数学第一章数列2等差数列第4课时等差数列的综合应用练习含解析北师大版必修5

    第五题中,利用等差数列的前n项和公式S_n = n/2 * (2a1 + (n-1)d)以及S8 = 4S4,可以解出首项a1和公差d,然后计算a10。 第六题考察了如何找到使得前n项和Sn最大的n值,通过分析an的表达式,找到正数项的最后一个...

    七年级数学12月独立作业试题.doc

    5. 连续偶数的概念:第五题考察连续偶数的性质。三个连续偶数,最大一个是2n+2,那么最小的偶数就是2n,中间的偶数是2n+2-2=2n。 6. 近似数的理解:第六题涉及近似数的精确度和有效数字。8.8×10^3精确到百位,有两...

    普及组CSP-J第五套模拟试题模拟题附答案

    具体来说,从6个人中选择3个人作为第一组的组合数为C(6,3),但由于两个组是对称的,所以最终的结果需要除以2,避免重复计算。因此,总共有\(C(6,3)/2 = (6! / (3! * 3!)) / 2 = 20 / 2 = 10\)种不同的分组方案。 ##...

    2017年第二十三届NOIP(C语言)普及组初赛试题及详细答案

    设A和B是两个长为n的有序数组,现在需要将A和B合并成一个排好序的数组,任何以元素比较作为基本运算的归并算法在最坏情况下至少要做()次比较** - **解析:** 最坏情况下,每次比较只能确定一个元素的位置,因此...

    湖北省武汉市部分中学2015_2016学年七年级数学上学期期中联考试题新人教版

    7. 序列和数列规律:第10题给出了一个数列,1, 3x^2, 5x^3, ...,这个序列的通项公式是(2n-1)x^n,第2015个单项式是4029x^2015。 8. 二进制与十进制转换:二进制是计算机的基础,将十进制数转换为二进制是基础计算...

    【世纪金榜】2016届高考数学总复习 课时提升作业(三十) 5.3等比数列及其前n项和 文 新人教A版

    第五题通过前n项和公式推断等比数列的条件。 这些题目和解析充分展示了等比数列及其前n项和在高中数学复习中的重要地位,同时也是考察学生对基本概念和公式掌握程度的有效手段。在实际解题过程中,学生需要熟练运用...

    四川省南充市营山县营山中学校2014_2015学年七年级数学上学期期中试题无答案新人教版

    5. 整式和单项式的区分:第五题涉及代数表达式的分类。整式包括单项式和多项式,而单项式是由字母和数字相乘组成,不含有加减运算;多项式则是由单项式相加或相减构成。根据题目中的表达式,可以分析出整式和单项式...

    目前最火最热门的python经典编程题之3

    57.和为S的连续正数序列 Array 关注 58.翻转单词序列 String 58.左旋转字符串 String 59.滑动窗口的最大值 Queue 常考 60.n个骰子的点数 61.扑克牌顺子 62.孩子们的游戏 Math 63.股票的最大利润 Math 64.求1...

    四川省新津中学2012-2013学年高二数学6月月考试题新人教A版

    17. 等比数列的性质:第十八题理科部分讨论了正数数列的等比性质,需要掌握等比数列的定义、通项公式和前n项和公式。 18. 数列求和与通项公式:第十八题文科部分要求求解数列的通项公式,需要通过已知的和公式推导...

    《数据结构 1800题》

    16.设m.n均为自然数,m可表示为一些不超过n的自然数之和,f(m,n)为这种表示方式的数目。例f(5,3)=5, 有 5种表示方式:3+2,3+1+1,2+2+1,2+1+1+1,1+1+1+1+1。 ①以下是该函数的程序段,请将未完成的部分填入,...

    世界500强面试题.pdf

    1.5.10. 输入一个正数 n,输出所有和为 n 连续正数序列 ................................125 1.6. 面试题集合(五) .......................................................................................126...

    CSP-J模拟试题模拟题附答案

    例如,在给定的第一道程序题中,通过分析代码逻辑可以得出输入391时,输出结果应为933,这是因为程序通过一系列赋值操作实现了变量值的交换。 以上是对给定CSP-J模拟试题中的知识点进行的详细解释。这些知识点涵盖...

    数据结构(C++)有关练习题

    就在第n行之前插入后续文本,如果I后面没有跟数字,就在当前行之前插入文本,如果输入D,后面跟着m,n,一个数字n或者没有数字,就分别删除m到n行,第n行或者当前行,命令L用于显示文本; 6、 用C++编写求多项式...

    福建省福州市2015届高三数学毕业班第二次质量(3月)检测试卷 理

    5. **算法与程序**:第五题通过一个简单的程序框图,让学生分析并输出结果,测试逻辑思维能力。 6. **几何概率**:第六题探讨点P在正方体内距离面的最短距离,计算概率。 7. **线性代数与向量**:第七题中直线与...

    华师大七年级上第二章有理数测试精选.doc

    5. **负数的个数**:第五题中,`(n是正整数)`表示一个包含n个数的集合,题目要求找出其中的负数个数,需要了解正整数的定义和负数的概念。 6. **数轴上的点与有理数的关系**:第六题涉及到数轴上点的位置关系,例如...

    河南省信阳市淮滨县2018中考数学周考试卷2018年4月20日pdf

    5. 调查方法:第五题涉及到统计学中的调查方式,适合用普查的是D,了解某班学生的数学测试成绩,因为普查适用于总体小且可操作的情况。 6. 不等式的解集:第六题通过图示判断不等式的解集,解集在数轴上表示正确的...

Global site tag (gtag.js) - Google Analytics