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

方法一:记录序列长度。推断首项是否满足条件就可以

首先联想到的就是等差数列,并且方差为1的正数等差数列,我们仅仅须要记录一个序列长度,依据等差数列公式sum = na1+n(n-1)*d/2;我们能够得到na1 = sum - n(n-1)/2;仅仅需推断a1大于0就可以。当中n是我们记录的序列长度。

详细的程序例如以下:

void continuesum(int sum)
{
int n = 2, na1 = 0;
while( n*(n+1) <= 2*sum)
{
na1 = sum - ((n-1)*n/2);
if(na1/ n > 0 && na1 % n==0 )
{
int t = na1/n;
cout << t << "-" << t+n-1 << endl;
}
n++;
}
}

方法二:维护序列的首位两个元素值。以及当前序列和

我们还能够採用第二种方法,借鉴点击打开链接。原文中程序存在的问题被解决掉了。其详细做法是基于第一个元素肯定不能大于sum/2。并且最后一个元素不能大于sum的。当当前序列和大于sum时,减去首项,然后首项加一,(就是从序列中去掉第一个元素),当当前序列和小于sum时,尾项加一。即加入元素。

void continuesumother(int sum)
{
int start=1, ends=2, mid = sum/2, cursum = 3;
while(start <= mid && ends < sum)
{
if(cursum == sum)
{
cout<<start<<"-"<<ends<<endl;
}
while(cursum> sum && start < mid)
{
cursum-=start;
start++;
if(cursum == sum)
{
cout<<start<<"-"<<ends<<endl;
}
}
ends++;
cursum+=ends;
}
return ;
}

微软100题第51题:和为n连续正数序列的更多相关文章

  1. 和为n连续正数序列 【微软面试100题 第五十一题】

    题目要求: 输入一个正数n,输出所有和为n连续正数序列(至少两个). 例如输入15,由于1+2+3+4+5 = 4+5+6 = 7+8 = 15.所以输出3个连续序列1~5,4~6,7~8. 参考资料 ...

  2. 41和为S的连续正数序列+注意循环条件记一下这题特殊解法

    题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...

  3. 【剑指Offer面试编程题】题目1354:和为S的连续正数序列--九度OJ

    题目描述: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久, ...

  4. 剑指offer41:所有和为S的连续正数序列,例如,有多少种连续的正数序列的和为100

    1 题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久 ...

  5. 《剑指offer》第五十七题(为s的连续正数序列)

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

  6. 每天一道算法题(12)——和为n的连续正数序列或者随机数

    题目:输入一个正数n,输出所有和为n 连续正数序列.例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3 个连续序列1-5.4-6 和7-8. 1.思路 尊崇以下策略: (1)对 ...

  7. 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!

    // test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  8. 《剑指Offer》题五十一~题六十

    五十一.数组中的逆序对 题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数.例如,在数组{7, 5, 6, 4}中,一共存 ...

  9. 剑指offer 面试51题

    面试51题: 题目:数组中的逆序对 题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007 ...

随机推荐

  1. js常用特效——选项卡效果

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. 兴趣爱好-QQ的本地共享

    QQ这个本地共享简直了,不就实现了公网FTP的功能么?好方便啊,有啥文件共享给好友就直接放在本地就可以了,真好用

  3. HDU——T 1054 Strategic Game

    http://acm.hdu.edu.cn/showproblem.php?pid=1054 Time Limit: 20000/10000 MS (Java/Others)    Memory Li ...

  4. python监控linux性能以及进程消耗的性能

    # -*- coding: utf-8 -*- """ Created on Tue Jun 10 10:20:13 2014 @author: lifeix " ...

  5. node--20 moogose demo2

    db.js /** * Created by Danny on 2015/9/28 16:44. */ //引包 var mongoose = require('mongoose'); //创建数据库 ...

  6. linux 下的两种软件安装方式 —— 源码(编译、安装),编译好的二进制(直接安装)

    我们以 GPG(加密工具)为例来说明两种安装方式的区别: 源码(Source code releases,名称中则会含有src等说明信息,tarball:source),先编译再安装 GPU 的源码地 ...

  7. [bzoj 1398] Vijos1382寻找主人 Necklace 解题报告(最小表示法)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1398 题目: Description 给定两个项链的表示,判断他们是否可能是一条项链. ...

  8. 27.boost多线程

    #define _CRT_SECURE_NO_WARNINGS #include <boost/thread.hpp> #include <iostream> #include ...

  9. ApacheFlink简介

    对无界数据集的连续处理 在我们详细介绍Flink之前,让我们从更高的层面上回顾处理数据时可能遇到的数据集的类型以及您可以选择处理的执行模型的类型.这两个想法经常被混淆,清楚地区分它们是有用的. 首先, ...

  10. sql 跟踪

    目录 1 sql跟踪 1.1 alter session 1.2 DBMS_MONITOR 1.3 DBMS_SESSION 1.4 oradebug模式 1.5 触发器的模式启用sql 跟踪 1.6 ...