剑指offer-和为s的两个数字VS和为s的连续正数序列
2017-07-31 15:36
471 查看
题目:
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使他们的和正好为s,如果有过对数字的和等于s,输出乘积最小的一对;
题目:
输入一个正数,打印出所有和为s的连续正数序列(至少含有两个数);
输入一个递增排序的数组和一个数字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); }
相关文章推荐
- 剑指Offer之 - 和为s的两个数字 VS 和为s的连续正数序列
- 剑指Offer-面试题41-和为s 的两个数字vs 和为s 的连续正数序列
- 【剑指offer-Java版】41和为s的两个数字VS和为s的连续正数序列
- 剑指offer 41. 和为s的两个数字VS和为s的连续正数序列
- 【剑指offer之和为s的两个数字VS和为s的连续正数序列】
- 剑指Offer:和为s的两个数字VS和为s的连续正数序列
- 剑指offer 41 - 和为s的两个数字VS为s的连续正数序列
- 剑指Offer_面试题41_和为s的两个数字 VS 和为s的连续正数序列
- [剑指offer][面试题41]和为s的两个数字 VS 和为s的连续正数序列
- 剑指offer之面试题41和为s的两个数字VS和为s的连续正数序列
- 剑指offer---和为s的两个数字VS和为s的连续正数序列
- 剑指Offer 41题 和为s的两个数字VS 何为S的连续正数序列 Java版
- 剑指offer——和为s的两个数字VS和为s的连续正数序列
- 剑指offer——和为s的两个数字VS和为s的连续正数序列
- 剑指offer-面试题41:和为s的两个数字VS和为s的连续正数序列
- 【剑指Offer学习】【面试题41:和为s 的两个数字vs 和为s 的连续正数序列】
- 剑指offer——面试题41:和为s的两个数字VS和为s的连续正数序列
- 【剑指offer】6.3知识迁移能力——面试题41:和为s的两个数字VS和为s的连续正数序列
- 剑指offer-面试题41-和为s的两个数字VS和为s的连续正数序列
- 剑指offer-第六章面试中的各项能力(和为S的两个数字VS和为S的连续正序列)