C++初学者之根据输入的任何一个正整数,输出可能被表示的连续正整数

题目描述:一个正整数有可能可以被表示为 n(>=2) 个连续正整数之和,如:

15=1+2+3+4+5
15=4+5+6
15=7+8

请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。

输入数据:一个正整数,以命令行参数的形式提供给程序。

输出数据:在标准输出上打印出符合题目描述的全部正整数序列,每行一个序列,每个序列都从该序列的最小正整数开始、以从小到大的顺序打印。如果结果有多个序列,按各序列的最小正整数的大小从小到大打印各序列。此外,序列不允许重复,序列内的整数用一个空格分隔。如果没有符合要求的序列,输出 “NONE” 。

例如,对于 15 ,其输出结果是:

1 2 3 4 5
4 5 6
7 8

对于 16 ,其输出结果是:

NONE

这是一道2005年百度之星程序设计大赛试题初赛题目。思路如下:

1、满足要求的数是连续的,所以只要选定起始值累加求和即可;

2、要确保遍历所有可能的起始值并且让循环的次数尽量少。分析一下可以知道,一个数最少由两个数求和构成,又因为这两个数是连续的。所以最大的起始值不会大于该数的二分之一。

代码如下,VC6.0验证OK。请拍砖,^_^

#include <iostream>
#include <vector>
using namespace std;
// 根据输入的任何一个正整数,输出可能被表示的连续正整数
void Numbers(int number)
{
if (number <= )
{
return;
}
vector<int> save;
bool exist = false;
// 遍历可能的起始值
for (int possible = ; possible < number / + ; possible++)
{
int start = possible;
int i = start;
int sum = ;
while (sum <= number) // 保存可以表示的连续正整数并输出
{
sum += start;
if (sum == number)
{
exist = true;
for (; i < start + ; i++)
{
save.push_back(i);
}
for (i = ; i < save.size(); i++)
{
cout << save[i] << " ";
}
save.clear(); // 清空、准备保存下一可能的序列
cout << endl;
}
start++;
}
}
if (false == exist)
{
cout << "NONE" << endl;
}
}
int main(int argc, char **argv)
{
const int number = ;
Numbers(number);
Numbers();
return ;
}

以上所述是小编给大家介绍的C++初学者之根据输入的任何一个正整数,输出可能被表示的连续正整数,希望对大家有所帮助!

(0)

相关推荐

  • JQuery判断正整数整理小结

    var totalPage = document.getElementById("totalPage").value.trim();//获取总页 var reg=/^[1-9]\d*$/; //由 1-9开头 的正则表达式 //先判断是否为整数 在判断 是否在 1-总页 整数范围之内 if(reg.test(searchBox)){ if(parseInt(searchBox) > 0 && parseInt(searchBox) <= totalPage)

  • 使用JavaScript判断用户输入的是否为正整数(两种方法)

    在项目开发中,需要使用JavaScript验证用户输入的是否为正整数. 方法一: var type="^[0-9]*[1-9][0-9]*$"; var r=new RegExp(type); var flag=r.test(subjectHour.value); if(!flag){ alert("课时应为正整数"); subjectHour.focus(); return false; } 方法二: var type="^[0-9]*[1-9][0-9

  • 一种求正整数幂的高效算法详解

    核心思想是当n为偶数时,a^n = a^n/2 × a^n/2当n为奇数时,a^n = a^(n-1)/2 × a^(n-1)/2  × a代码如下: 复制代码 代码如下: public class Power { public static void main(String[] args) {  System.out.println(power(5.5,5)); } private static double power(double base, int exponent) {  if (ex

  • JS只能输入正整数的简单实例

    如下所示: <html> <head> <title>只能输入正整数</title> </head> <body> 兑换数量:<input type="text" ID="txtNumber" Width="50px" onkeyup="if(this.value.length==1){this.value=this.value.replace(/[^1-9]

  • 正则文本框只能输入正整数

    正则实现文本框只能输入正整数 [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

  • JavaScript正则表达式校验非零的正整数实例

    话不多说,请看实例代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></titl

  • js判断输入是否为正整数、浮点数等数字的函数代码

    1.下面列出了一些判读数值类型的正则表达式 复制代码 代码如下: /^\d+$/ //非负整数(正整数 + 0) /^[0-9]*[1-9][0-9]*$/ //正整数 /^((-\d+)|(0+))$/ //非正整数(负整数 + 0) /^-[0-9]*[1-9][0-9]*$/ //负整数 /^-?\d+$/ //整数 /^\d+(\.\d+)?$/ //非负浮点数(正浮点数 + 0) /^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0

  • C++求四个正整数最大公约数的方法

    本文实例讲述了C++求四个正整数最大公约数的方法.分享给大家供大家参考,具体如下: /* * 作 者: 刘同宾 * 完成日期:2012 年 11 月 16 日 * 版 本 号:v1.0 * * 输入描述: 输入四个正整数,输出其最大公约数. * 问题描述: * 程序输出: * 问题分析:略 * 算法设计:略 */ #include<iostream> using namespace std; int f(int,int); int g(int,int,int,int); int main()

  • JavaScript正则表达式校验非正整数实例

    话不多说,跟小编一起来看看吧 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></t

  • jquery 正整数数字校验正则表达式

    限制用户输入的内容可以有如下做法: $("#id").keyup(fucntion(){//当键盘按下之后立即校验,并替换当前操作框中的内容 var value = $(this).val(); $(this).val(value.replace(reg,replace_data)); }); 最常见的就是限制用户只能录入数字 var reg = new RegExp("[^0-9]","g");  [^0-9]表示非0-9之间的数字,g表示全局

  • 只能输入小于最大数且是正整数的脚本

    最大数: 98765 具体功能自己测试咯 :) /* 只允许输入数字 */ function numInputCheck(o,m){ var d; if(',48,49,50,51,52,53,54,55,56,57,96,97,98,99,100,101,102,103,104,105,8,9,13,'.indexOf(',' + event.keyCode + ',')==-1){ event.returnValue=null; } if(m!=null){ d = event.keyCod

随机推荐