#include <iostream>
using namespace std;
//Q1.get 2 nums in an ascend array whose sum equals s
void TwoNum(int* num,int len,int s){
if(!num||len<2) return;
int *small=num,*large=num+len-1;
while(small<large){
if(*small+*large==s){
cout<<*small<<' '<<*large<<'\n';
small++;
}
else if(*small+*large<s)
small++;
else
large--;
}
}
//Q2.get continuous nums whose sum equals s
//solution1:define a function to do the sum job
int Sum(int small,int large){
int sum=0;
for(int i=small;i<=large;++i)
sum+=i;
return sum;
}
void Continuous(int s){
if(s<3) return;
int small=1,large=2;
while(2*small<s){
if(Sum(small,large)==s){
for(int i=small;i<=large;++i){
cout<<i<<' ';
}
cout<<'\n';
large++;
}
else if(Sum(small,large)<s)
large++;
else
small++;
}
}
//solution2:define a variable to do the sum job
void Continuous_2(int s){
if(s<3) return;
int small=1,large=2;
int cursum=small+large;
while(2*small<s){
if(cursum==s){
for(int i=small;i<=large;++i){
cout<<i<<' ';
}
cout<<'\n';
large++;
cursum+=large;
}
else if(Sum(small,large)<s){
large++;
cursum+=large;
}
else{//minus before small++
cursum-=small;
small++;
}
}
}
int main(){
int num[]={1,2,3,4,5,10,12,14};
int s=15;
TwoNum(num,sizeof(num)/sizeof(*num),s);
cout<<"**********"<<'\n';
Continuous(s);
Continuous_2(s);
}