4 11
推荐指数:※
来源:http://ac.jobdu.com/problem.php?pid=1352
输入是一个排序好的数组,数的范围为int。头尾两个指针扫描即可。输出两个数的乘积最小的,其实就是离得最远的。a+b=s,当a=b时,a*b取得最大值。
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<string.h> using namespace std; int main() { int n,k; while(scanf("%d%d",&n,&k)!=EOF){ int i,j; int *num=new int[n]; for(i=0;i<n;i++) scanf("%d",&num[i]); i=0; j=n-1; while(i<j){ if(num[i]+num[j]==k){ printf("%d %d\n",num[i],num[j]); break; } else if(num[i]+num[j]>k){ j--; } else{ i++; } } if(i>=j) printf("-1 -1\n"); } return 0; }