本文主要是介绍和为某一值的连续正序列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:输入一个正数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;
}
这篇关于和为某一值的连续正序列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!