//題目:輸入一個正數n,輸出所有和爲n連續正數序列。
//例如輸入15,由於1+2+3+4+5=4+5+6=7+8=15,所以輸出3個連續序列1-5、4-6和7-8。
//分析:這是網易的一道面試題。
//這個題目出自微軟等數據結構+算法面試100題
//在DevC++中編譯通過
/*
Name:
Copyright:
Author:
Date: 23-06-11 15:27
Description:
*/
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
cout<<"n=";
int n;
cin>>n;
int *t;
if(!(t=(int *)malloc(sizeof(int)*(n/2+1))))
{
exit(0);
}
for(int i=0;i<(n/2+1);++i)
{
t[i]=i+1;
}
int sml,big;
int sum=t[0]+t[1];
for(sml=0,big=1;big<(n/2+1);)
{
if(sum==n)
{
for(int i=sml;i<=big;i++)
{
cout<<t[i]<<" ";
}
cout<<endl;
sum-=t[sml++];
sum+=t[++big];
}
else
{
if(sum<n)
{
sum+=t[++big];
}
else
{
sum-=t[sml++];
}
}
}
system("pause");
return 0;
}
分析:首先開闢一個數組,並對之初始化。這個算法做的事情是不斷地調整sml 和 big ,sml指向小的數,big指示大的數,他們之間(包括邊界)各個數的和爲sum.