您的位置:首页 > 其它

和为某一值的连续正序列

2015-08-04 21:59 375 查看
题目:输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~5、4~6和7~8
void print(int* nums, int left, int right)
{
for(int i= left; i<= right; ++i)
{
cout<<nums[i]<<",";
}
cout<<endl;
}

void FindAllNumsWithSum(int* nums, int start, int end, int k)
{
if(nums == NULL || end < 1 || k < 3)
{
return ;
}

int MiddleIndex  =(start + end)/2;
int MiddleData = nums[MiddleIndex];

if(MiddleData >= k)
{
end = MiddleIndex - 1;
//FindNumsWithSum(nums, start, end, k);
}

else
{
int left = start;
int right = end;

int middle = (1 + k)/2;
int CurSum = nums[left] + nums[right];

while(left < middle)
{
if(CurSum == k)
{
print(nums, left ,right);
}
while(CurSum > k && left < middle)
{
CurSum -=nums[left];
left++;

if(CurSum == k)
{
print(nums, left, right);
}
}

right++;
CurSum += nums[right];

}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int Array[] = {1,2,4,7,11,15};
int len = sizeof(Array)/sizeof(int);

int k = 15;

FindNumsWithSum(Array, 0, len -1, k);
getchar();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息