题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
s的值自行定义,下面以sum=7为例:输出为1,6,和为7,同时乘积也最小;
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int sum=7;//定义为7
vector<int > array;//定义一个int类型的向量 ,类似于一维数组
for(int i=1;i<=7;i++)//存入数据1,2,3,4,5,6;
{
array.push_back(i);
}
//for(int i=0;i<array.size();i++)
// cout<<array[i]<<" ";
// cout<<endl;
vector<int> result;//定义一个int类型的向量 ,类似于一维数组
int length=array.size();
int start=0;
int end=length-1;
while(start<end)//利用夹逼定则,从前,从后依次逼近,找到符合条件的值,同时他们的乘积也最小
{
if(array[start]+array[end]==sum)
{
result.push_back(array[start]);
result.push_back(array[end]);
break;
}
else if(array[start]+array[end]<sum)
start++;
else
end--;
}
for(int i=0;i<result.size();i++)
{
cout<<result[i]<<" ";
}
}