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

1.思路

尊崇以下策略:

(1)对于固定的left.当前sum值小于目标Sum,则right一直后移

(2).sum==Sum。则输出序列,且将right后移

(3)对于固定的right.,sum>Sum时,始终将left左移动

2.代码

void print(const int& left,const int& right){
static int flag=0;//局部静态变量,仅仅初始化1次
cout<<"NO:"<<++flag<<"--";
for(int i=left;i<=right;i++)
cout<<i<<" ";
cout<<endl;
} void findSequence(const int& Sum){
int left=1,right=1,sum=1;
while(left<=Sum/2){
if(sum==Sum){
print(left,right);
right++;
sum+=right;
}
else if(sum>Sum){
sum-=left;
left++;
}
else{
right++;
sum+=right;
}
}
}

或者更加简短的,写作:

void findSequence(int Sum){
int left=1,right=1,sum=1;
while(left<=Sum/2){
while(sum>Sum){
sum-=left;
left++;
}
if(sum==Sum)
print(left,right);
right++;
sum+=right;
}
}

即每一次大循环中都将right后移,在循环体内,若sum>Sum则将left左移动。相等时则输出。

3.特殊情况

题目: 输入两个整数n和m,从数列1,2,3...n中随意取几个数,使其和等于m,要求列出所有的组合。

分析。这里,从最大的数开始,对于每一个数,无非存在两种形式。即参与查找和不参与查找。使用递归即可。参与查找时,对应的n减小且和也减小。不参与查找时,只有n减小,和不变化。

#include <iostream>
#include <list>
using namespace std;
list<int> list1;
void find_factor(int sum,int n)
{
//递归出口
if(n<=0||sum<0)
return;
//输出找到的数
if(sum==n)
{
list1.reverse();
for(list<int>::iterator iter=list1.begin();iter!=list1.end();iter++)
cout<<*iter<<"+";
cout<<n<<endl;
list1.reverse();
}
list1.push_front(n);
find_factor(sum-n,n-1);//n参与查找
list1.pop_front();
find_factor(sum,n-1);//n不参与查找
} int main(void)
{
int sum,n;
cin>>sum>>n;
cout<<"所有可能的序列,如下:"<<endl;
find_factor(sum,n);
return 0;
}

最新文章

  1. 在使用EF时调用DBFUNCTION扩展方法时,发生ENTITYCOMMANDEXECUTIONEXCEPTION 异常的解决办法
  2. iOS GCD学习笔记
  3. CEF3可行性
  4. C#获取本机的MAC地址
  5. linux,下载与安装
  6. 【开源项目4】Android ExpandableListView
  7. sum(iterable[, start]) 对集合求和
  8. 对DNSPOD添加域名解析的一些见解
  9. Android studio gradle配置!!!【转】
  10. js存款计算器原生小demo
  11. “华尔街之狼”:ICO是“史上最大骗局”
  12. [转]git问题ERROR: Repository not found.的解决
  13. asp.net MVC里的 ModelState使用方法
  14. java去重(1通过迭代器,2直接赋值)
  15. mysql 更新语句中加判断条件
  16. docker vm 性能优劣
  17. GUI:GUI的方式创建/训练/仿真/预测神经网络—Jason niu
  18. [osg][osgEarth][osgGA][原] EarthManipulator------基于oe的相机漫游器(浅析)
  19. python学习之RabbitMQ-----消息队列
  20. puppet更新失败

热门文章

  1. v2.0 组件通信的总结
  2. jedis中的一致性hash算法
  3. NSLog Release
  4. jquery清空form表单
  5. Mybatis 别名机制,自动扫描 数据的增删改
  6. 浅谈MariaDB Galera Cluster架构
  7. Java_脚本引擎_02_在Idea中进行Nashorn的Debug
  8. 省略setget方法
  9. hdu-2673-shǎ崽 OrOrOrOrz(水题)
  10. rabbitmq的vhost与用户管理