博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
和为n连续正数序列
阅读量:5740 次
发布时间:2019-06-18

本文共 1549 字,大约阅读时间需要 5 分钟。

  hot3.png

题目:输入一个正数n,输出所有和为n连续正数序列。

例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。

#include 
#include
using std::cin;using std::cout;using std::endl;using std::vector;vector< vector
> consecaddend(int n){ vector< vector
> vec; vector
iv; int i, j; //i是序列的长度,最大不超过sqrt(2n) //当n/i == i/2时应判断:如果i是奇数则停止循环,否则会得到以0开头的序列    //如:10/4 == 10/5 == 4/2 == 5/2 == 2 (感谢指正)    for (i = 2; ((j = n/i) > i/2) || (j == i/2) && (i%2 == 0); i++) if (i%2) { //i为奇数,仅当n能被i整除时存在这样的序列 if (n%i == 0) { j -= i/2; for (int k = 0; k != i; ++k) iv.push_back(j++); vec.push_back(iv); iv.clear(); } } else { //i为偶数,仅当n/i小数部分为0.5时存在这样的序列 if (n%i != 0 && 2*n%i == 0) { j -= i/2 - 1; for (int k = 0; k != i; ++k) iv.push_back(j++); vec.push_back(iv); iv.clear(); } } return vec;}int main(void){ int x; vector< vector
> v; while (cin >> x) { v = consecaddend(x); for(vector< vector
>::iterator viter = v.begin(); viter != v.end(); ++viter) { for(vector
::iterator iter = viter->begin(); iter != viter->end(); ++iter) cout << *iter << " "; cout << endl; } v.clear(); } return 0;}

转载于:https://my.oschina.net/pybug/blog/30338

你可能感兴趣的文章
pychecker:分析你的python代码
查看>>
我的友情链接
查看>>
DNS显性+隐性URL转发原理
查看>>
我的友情链接
查看>>
网易有道 IP地址、手机号码归属地和身份证 查询接口API
查看>>
鼠标停留在GridView某一行时行的颜色改变
查看>>
系列3:WAS Liberty Profile hello mysql jdbc
查看>>
基础知识:python模块的导入
查看>>
Android MVC之我的实现
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
关于批处理-1
查看>>
Tomcat部署Web应用方法总结
查看>>
Python3 django2.0 字段加密 解密 AES
查看>>
CCNA实验之:网络地址转换(NAT)实验
查看>>
计算机网络原理笔记-停止等待协议
查看>>
确定当前记录和下一条记录之间相差的天数
查看>>
sql语句返回主键SCOPE_IDENTITY()
查看>>
机器学习开源项目精选TOP30
查看>>
代码分析系列 内存执行过程
查看>>