69,373
社区成员
发帖
与我相关
我的任务
分享
题目:输入一个正数n,输出所有和为n连续正数序列。
例如输入,由于+2+3+4+5=4+5+6=7+8=15,所以输出个连续序列-5、-6和-8。因为整数序列是有序的,可以设立两个游标small,big,通过判区间[small,big]的和是否为N来得到这个序列。如果区间和大于n,small往前移动,如果小于n,big往前移动,等于就输出这个区间。时间复杂度是(n).
void ContinuousSequenceSum_1(int n)
{
int small = 1;
int big = 2;
int sum = small + big;
while(small < big && big <= n/2+1)
{
if(sum == n)
printf("start=%d, end=%d\n",small,big);
if(sum > n)
{
sum -= small;
small++;
}
else
{
big++;
sum += big;
}
}
}
#include <stdio.h>
#define count(a) sizeof(a)/sizeof(int)
int main()
{
int s[] = {-1,0,-2,1,2,2,3,4,7,9,11,13};
int sum = 7;
int i = 0;
int j = count(s)-1;
int g = 0;
while(i!=j)
{
if(s[i]+s[j] > sum) j--;
else if(s[i]+s[j] < sum) i++;
else
{
g = 1;
printf("%d+%d=%d\n",s[i],s[j],sum);
i++;
}
}
if(!g) printf("Not found!\n");
return 0;
}