算法 – 求和为n的连续正整数序列(C++)

算法 – 求和为n的连续正整数序列(C++)

大家好,又见面了,我是全栈君。

//****************************************************************************************************
//
//  求和为n的连续正整数序列 - C++ - by Chimomo
//
//  题目: 输入一个正整数n,输出全部和为n的连续正整数序列。比如:输入15,因为1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。

//// Answer: Suppose n = i+(i+1)+...+(j-1)+j, then n = (i+j)(j-i+1)/2 = (j*j-i*i+i+j)/2 => j^2+j+(i-i^2-2n) = 0 => j = (sqrt(1-4(i-i^2-2n))-1)/2 => j = (sqrt(4i^2+8n-4i+1)-1)/2.// We know 1 <= i < j <= n/2+1, so for each i in [1,n/2], do this arithmetic to check if there is a integer answer.//// Note: 二次函数 ax^2+bx+c=0 的求根公式为: x = (-b±sqrt(b^2-4ac)) / 2a。////****************************************************************************************************#include <iostream>#include <cassert>#include <stack>#include <math.h>using namespace std ;int FindConsecutiveSequence(int n){ int count = 0; for (int i = 1; i <= n/2; i++) { double sqroot = sqrt(4*i*i + 8*n - 4*i + 1); int floor = sqroot; if(sqroot == floor) { cout << i << "-" << (sqroot - 1) / 2 << endl; count++; } } return count;}int main(){ int count = FindConsecutiveSequence(15); cout << "Totally " << count << " sequences found." << endl; return 0;}// Output:/*1-54-67-8Totally 3 sequences found.*/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115523.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【STM32】HAL库 STM32CubeMX教程十二—IIC(读取AT24C02 )

    【STM32】HAL库 STM32CubeMX教程十二—IIC(读取AT24C02 )IIC简介IIC(Inter-IntegratedCircuit)总线是一种由NXP(原PHILIPS)公司开发的两线式串行总线,用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。在CPU与被控IC之间、IC与IC之间进行双向传送,高速IIC总线一般可达400kbps以上。PS:这里要注…

    2022年6月8日
    60
  • Java中dom4j读取配置文件实现抽象工厂+反射

    Java中dom4j读取配置文件实现抽象工厂+反射

    2021年8月24日
    52
  • 动画:用动画给面试官解释 TCP 三次握手过程

    动画:用动画给面试官解释 TCP 三次握手过程作者|小鹿来源|公众号:小鹿动画学编程写在前边TCP三次握手过程对于面试是必考的一个,所以不但要掌握TCP整个握手的过程,其中有些小细节也更受到面试官的青睐。对于这部分掌握以及TCP的四次挥手,小鹿将会以动画的形式呈现给每个人,这样将复杂的知识简单化,理解起来也容易了很多,尤其对于一个初学者来说。学习导图一、TCP是什么?TCP(Transmissio…

    2022年6月17日
    36
  • Oracle创建表空间和表「建议收藏」

    Oracle创建表空间和表「建议收藏」创建表空间和表ORACLE物理上是由磁盘上的以下几种文件:数据文件和控制文件和LOGFILE构成的oracle中的表就是一张存储数据的表。表空间是逻辑上的划分。方便管理的。数据表空间(Tablespace)       存放数据总是需要空间,Oracle把一个数据库按功能划分若干空间来保存数据。当然数据存放在磁盘最终是以文件形式,所以一盘一个数据表空间包含一个以上的物理文件数据…

    2022年7月11日
    26
  • .NET-OOP:.文件读写与XML

    .NET-OOP:.文件读写与XML
            文件读写分五个步骤:
    1.        //创建文件流
    FileStreammyFs=newFileStream(path,FileMode.CreateNew);
    2.         //创建写(读)入器
    StreamWritermySw=newStreamWriter(myFs);
    StreamReadermySf=newStreamReader(mtFs);
    3.       

    2025年9月30日
    5
  • MATLAB中meshgrid函数用法

    MATLAB中meshgrid函数用法meshgrid是MATLAB中用于生成网格采样点的函数。在计算机中进行绘图操作时,通常会给出如z=x^2+y^2会给出表格数据,涉及到x、y、z三组数据,而x、y这两组数据可以看做是在Oxy平面内对坐标进行采样得到的坐标对(x,y)。表中一共有7*7=49个数据,我们分别标出来,得到下图 试问如何用MATLAB函数画出此图

    2022年6月6日
    100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号