您的位置:首页 > 编程语言 > C语言/C++

查找等式的解

2016-12-11 21:23 162 查看

查找等式的解

题目描述:

有三个数列 a b c ,有一个数 x,计算是否存在a b c 中的在3个整数a b c 使得a+b+c=x成立。

输入:

第一行为三个整数,分别为a b c 数列的长度

第二行到第四行分别为a b c 数列中的值

第五行为要测试的 x 的个数 n

接下来的 n 行为 n 个测试数据

输出:

n行输出,如果能找到这样的 a b c ,输出yes, 如果不存在这样的 a b c 输出no

思路:

先计算出a+b的值,然后在所有a+b中二分查找是否有满足的值使得满足当前的c和x.

#include <iostream>
#include <algorithm>
#define MAX 500
using namespace std;

int main()
{
//输入数据
int A[MAX], B[MAX], C[MAX];
int sum[MAX * MAX];
int la, lb, lc;
int N, X[MAX];
bool answer[MAX];
cin>>la>>lb>>lc;
for(int i = 0 ; i < la ; i++)
cin>>A[i];
for(int i = 0 ; i < lb ; i++)
cin>>B[i];
for(int i = 0 ; i < lc ; i++)
cin>>C[i];
cin>>N;
for(int i = 0 ; i < N ; i++)
cin>>X[i];
int k = 0;
for(int i = 0 ; i < la ; i++)
for(int j = 0 ; j < lb ; j++)
sum[k++] = A[i] * B[j];
sort(sum, sum+k);
int l, r, S;
for(int n = 0 ; n < N ; n++){
answer
= false;
for(int i = 0 ; i < lc ; i++){
S = X
- C[i];
l = 0, r = k - l;
while(r >= l){
int m = (r + l) / 2;
if(sum[m] == S){
answer
= true;
break;
}else if(sum[m] > S){
r = m-1;
}else{
l = m+1;
}
}
if(answer
)
break;
}
}
for(int i = 0 ; i < N ; i++)
if(answer[i])
cout<<"YES\n";
else
cout<<"NO\n";
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 算法