将一个正整数表示为连续自然数的和

将一个正整数表示为连续自然数的和,比如给定整数15,那么根据题意,需要输出的连续自然数为1+2+3+4+5=4+5+6=7+8=15。题目中的连续自然数序列可以看做一个升序的有序数组,取数组前两个数为起始的区间的左右两个端点。对区间中的值进行累加,如果累加值小于给定的整数时,那么右端点向右移动,添加下一个数字,如果累加值大于给定的整数时,那么左端点向右移动,表示去掉最左端的最小值,如果值与给定整数相等,那么输出后,需要重新对定区间左右两个端点赋值,直到左端点的值小于 (number+1)/2。代码如下:

复制代码

1 void printContinuous(int begin, int end, int value)

2 {

3     for(int i=begin; i!=end; i++)

4         cout<

5     cout<

6 }

7

8 void findContinuous(int n)

9 {

10     int begin=1, end = 2;   //begin和end分别代表和为n的连续正数的区间

11     int middle = (n+1)/2;   //middle表示n的中间数,middle*2 >= n,所以控制begin

12     int sum = begin+end;

13

14     while(begin < middle)

15     {

16         if(sum == n)    //和与n相等,则打印

17         {

18             printContinuous(begin, end, n);

19             //从begin+1开始重新计算sum的值

20             begin++;

21             end = begin+1;

22             sum = begin+end;

23         }

24         else if(sum > n)//如果sum>n,那么begin右移,即减去最左边的数

25         {

26             sum-=begin;

27             begin++;

28         }

29         else//如果sum

30         {

31             end++;

32             sum+=end;

33         }

34     }

35 }

复制代码

上面的解法可以满足题目的要求,我们现在试着用数学的方法来求解此题。题目中要求将给定整数表示为连续自然数的和,而连续自然数序列可以看做一个等差数列,那么题目可以重新描述为,求出和为给定整数值的自然数组成的等差数列。等差数列前n项和的公式为:a1*n+ n*(n-1)*d/2,其中a1表示首项值,n表示项数,d表示公差。根据公式,可以写出代码:

复制代码

1 void findContinuous2(int n)

2 {

3     for(int i=1; i

4     {

5         for(int j=1; j

6         {

7             //表示以i开头,到i后面j项为止的等差数列和

8             int sum = i*j+(j*(j-1)/2);

9             if(sum == n)

10             {

11                 printContinuous(i, i+j-1, n);

12             }

13         }

14     }

15 }

复制代码

可以看出,数学对于一些算法还是比较重要的,不能说一定会提高程序的运行效率,但在解决一些问题是,数学上的知识会帮助我们更加清晰化的解法。

http://www.dengb.com/Javabc/907875.htmlwww.dengb.comtruehttp://www.dengb.com/Javabc/907875.htmlTechArticle将一个正整数表示为连续自然数的和 将一个正整数表示为连续自然数的和,比如给定整数15,那么根据题意,需要输出的连续自然数为1+2...

java表示自然数,将一个正整数表示为连续自然数的和相关推荐

  1. 连续正整数的和思路c语言,将一个正整数表示为连续自然数的和(附C实现源码)(原创)...

    问题描述:将一个正整数表示为两个或这个两个以上的连续自然数的和.给定一个数,输出所有的可能的结果. 例如: 3=1+2; 9=4+5; 9=2+3+4; 解决方法: 对于给定的整数n,求解基本思路如下 ...

  2. 正整数表示为连续自然数的和(难度:1颗星)

    问题描述: 输入一个正整数N,输出能相加等于N的联系序列的和(序列必须多于1项),如果这种序列存在,则输出所有这样的序列,如果不存在,则输出NULL. 例如:输入为15 输出: 1+2+3+4+5=1 ...

  3. 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

    代码: package com.liron.p1;import java.util.Scanner;/**将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5.*/ public cla ...

  4. 整数拆分为连续自然数之和

    闲得蛋疼: 连续自然数之和可以利用等差数列求和公式求得: , N=n*a+n*(n-1)/2: 其中N为需要拆分的整数,n为拆分后连续自然数个数,a为连续自然数中第一位数,比如: 36=11+12+1 ...

  5. 连续自然数平立方求和推导

    连续自然数平立方求和推导 连续自然数求和公式推导 连续自然数平方和公式推导 连续自然数立方和公式推导 连续自然数求和公式推导 由 ( n + 1 ) 2 = n 2 + 2 n + 1 得 : ( n ...

  6. Java将一个正整数进行因数分解

    Java将一个正整数进行因式分解 package p3;import java.util.Scanner;public class breaknumber {public static void ma ...

  7. Java——将一个正整数分解质因数

    目录 题目描述 代码实现 结果展示 题目描述 将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 代码实现 import java.util.Scanner;public class ...

  8. 给定一个正整数n,计算有多少个不同的连续自然数段

    给定一个正整数n,计算有多少个不同的连续自然数段,其中自然数的个数至少为2,其和恰为n. u  例如,当n = 27时,有3 个不同的长度大于等于2 的连续自然数段的和恰为27: 2 + 3 + 4 ...

  9. 【华为OD机试真题 JAVA】用连续自然数之和来表达整数

    JS版:[华为OD机试真题 JS]用连续自然数之和来表达整数 标题:用连续自然数之和来表达整数 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限 一个整数可以由连续的自然数之和来表 ...

  10. 华为OD机试 - 用连续自然数之和来表达整数(Java JS Python)

    题目描述 一个整数可以由连续的自然数之和来表示. 给定一个整数,计算该整数有几种连续自然数之和的表达式,且打印出每种表达式 输入描述 一个目标整数T (1 <=T<= 1000) 输出描述 ...

最新文章

  1. 编辑距离:最长公共子序列-LCS问题
  2. Atcoder Beginner Contest 124 解题报告
  3. Qt Linguist 翻译
  4. HttpClient学习系列 -- 学习总结
  5. rss聚合模式案例_RSS的完整形式是什么?
  6. #ifdef,#ifndef,#define,#endif解析(原)
  7. 分区起始位置参数溢出_Kafka分区副本分配解析
  8. SpringBoot (14)---日志配置(logback)
  9. python画圆填色橙色_基于TPC-C基准的Python ORM的性能测试详解
  10. netcat 传输文件
  11. 如何在一个月内通过PMP考试?(含资源)
  12. 高通9008刷机,刷机参考
  13. 为什么有符号数0XFFFF FFFF代表-1?
  14. C盘扩容好帮手——傲梅分区助手
  15. 无线鼠标插上去没反应
  16. linux物料管理,SAP-PM 工具管理篇之出入库
  17. python手机自动点击_通过电脑,模拟点击手机屏幕 /手机自动点击,刷金币?
  18. 【深度强化学习】(4) Actor-Critic 模型解析,附Pytorch完整代码
  19. mysql实现自增字符串_Mysql实现字符串主键自增示例教程-Go语言中文社区
  20. 安卓实现音乐播放器(暂停,播放)

热门文章

  1. 产品生命周期管理展望
  2. NOT NULL 和 DEFAULT 的区别
  3. 第三(关于set、file、args)
  4. 揭秘苹果应用审核团队(史上最全版)
  5. 发票校验属于物料管理(MM)模块,发票为财务和成本控制提供付款信息和发票评估。
  6. oracle执行计划相关
  7. 关于互联网金融的安全、监管
  8. 分时线的9代表什么_一位血亏百万股民血泪史告诉你:为什么要打板?
  9. 高德导航在天地图显示
  10. 进击的“懒人经济”,快手又迎来一个万亿蓝海市场