您的位置:首页 > Web前端

剑指offer-和为s的两个数字VS和为s的连续正数序列

2017-07-31 15:36 471 查看
题目:

输入一个递增排序的数组和一个数字s,在数组中查找两个数,使他们的和正好为s,如果有过对数字的和等于s,输出乘积最小的一对;

/所给数组为排序数组,若有多组,数组乘积最小的一组
//而距离越远乘积越小,所以从两端开始对数组进行遍历。
bool FindNumbersWithSum(int data[], int length, int sum, int *num1, int *num2)
//参数:给定数组,数组长度,给定和,满足要求的两个数值;
//考虑特殊情况,若不存在和为s的两个数,加入判断的found;
{
bool found = false;
if (length < 1 || num1 == NULL || num2 == NULL)
return found;
int start = 0;
int end = length - 1;
while (end>start)
{
int cur = data[start] + data[end];
if (cur == sum)
{
*num1 = data[start];
*num2 = data[end];
found = true;
}
else if (cur > sum)
{
end--;
}
else
start++;
}
return found;
}


题目:

输入一个正数,打印出所有和为s的连续正数序列(至少含有两个数);

void FindContinuousSequence(int sum)//找到所有和为s的连续序列;
{
if (sum < 3)
return;
int start = 1;
int end = 2;
int middle = (sum + 1) / 2;
int cur = start + end;
while (start < middle)
{
if (cur == sum)
print(start, end);
while (cur >sum&&start < middle)//截止条件判断,cur是否大于sum;
{
cur -= start;
start++;
if (cur == sum)
print(start, end);
}
end++;
cur += end;
}
}
void print(int small, int big)
{
for (int i = small; i <= big; i++)
printf("%d\n", i);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐