递增数列中找和为s乘积最小的两个数
2014-04-18 14:44
225 查看
#include<cstdio> void getSumKPair(int *arr, int n, int k, int &a, int &b) { int nLow, nHigh; long long product; nLow = 0, nHigh = n-1; a = b = -1, product = 0x7fffffff; int flag=0; while(nLow < nHigh) { if(arr[nLow] + arr[nHigh] == k ) { if(!flag){ a = nLow; b = nHigh; product = arr[a] * arr[b]; ++nLow, --nHigh; } else if(arr[nLow] + arr[nHigh] < k) ++nLow; else --nHigh; } } const int MAX = 1000005; int arr[MAX]; int main() { int n, k, a, b; while(scanf("%d %d", &n, &k) != EOF) { for(a = 0; a < n; ++a) scanf("%d", &arr[a]); getSumKPair(arr, n, k, a, b); if(a == -1) puts("-1 -1"); else { a = arr[a]; b = arr[b]; if(a > b) printf("%d %d\n", b, a); else printf("%d %d\n", a, b); } } return 0; }
相关文章推荐
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 求递增序列中和为S的乘积最小的两个数
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- 面试金典之(一)找出和为SUM的递增数组array中的两个数使之乘积最小
- 两个数的乘积等于其最大公约数与最小公倍数的乘积,怎么证明?
- 两个数的乘积等于其最大公约数与最小公倍数的乘积,怎么证明?
- 给定一个递增排序的数组和一个数字s,求数组中和为s的俩个数。求乘积最小的俩个数
- hdu 5428 The Factor 求一个数列的乘积的最小因子的因子数大于2 筛素数
- Uva---11300 F. Spreading the Wealth (数学推理)---与数列有关的最小值一般与中位数有关
- 算法训练 最小乘积(基本型) java蓝桥杯
- 蓝桥杯 最小乘积
- 面试题8:输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。
- Python实现:选出列表中乘积最大的三个数和最小的三个数
- 求两个数的最大公约数和最小公倍数
- 输入数列,以某数为结束标志,以“先进先出”方式生成单链表,输出表中各结点的值;再求表中结点的平均值、最大值、最小值。
- [LeetCode] Minimum Swaps To Make Sequences Increasing 使得序列递增的最小交换
- C++练习之 求两个数的最大公约数与最小公倍数