题目描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序.
s可以自行定义。
下面以s=100为例, 输出为9,10,11,12,13,14,15,16;18,19,20,21,22;
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int sum=100;//输入100
vector<vector<int> > ans;//定义一个向量类型的向量,类似于二维数组
int s=1,r=1,result=1;
while(s<=r)
{
r++;//依次加一 ,保证连续正数
result+=r;//求和
while(result>sum)
{
result-=s;//去掉不符合的起点 ,因为怎么相加也等于不了sum
s++;//换起点再进入下一个循环
}
if(result==sum&&s!=r)
{
vector<int> tmp;//定义一个int类型的向量,类似于一维数组
for(int k=s;k<=r;k++)//输出s~r的连续正数
{
tmp.push_back(k);//数先进一维数组 !!!!!
}
ans.push_back(tmp);//然后一维数组再进二维数组!!!!!!!!
}
}
for(int i=0;ans.size();i++)
{
for(int j=0;j<ans[i].size();j++)
{
cout<<ans[i][j]<<" ";
}
cout<<endl;
}
return 0;
}