题目链接
解题思路
先排序。
对于每个数,找到另外两个数,使得与其中一个加起来小于目标与另外一个加起来大于目标。
如果找不到可能是只能选头两个或末尾两个。
再求绝对值那个更小就行了。
代码
#include#include #define MAX_NUM 1<<31-1using namespace std;const int maxLen = 1005;int data[maxLen];int targer[26];int ans[26];int minv;int Judge(int i, int n, int t){ int pre = -1; for(int k=i+1; k =t) pre=k; if(pre==-1) { if(data[i]+data[n-1] =t) { if(abs(data[i]+data[i+1]-t) abs(data[i]+data[pre]-t)) { minv = abs(data[i]+data[pre]-t); return data[i]+data[pre]; } else return MAX_NUM; } else if(minv>abs(data[i]+data[pre+1]-t)) { minv = abs(data[i]+data[pre+1]-t); return data[i]+data[pre+1]; } else return MAX_NUM;}int main(){ int n, cases = 1; scanf("%d", &n); while(n != 0) { for(int i=0; i