蓝桥杯CA大题第一题,给我恶心的不行,事后最后发现了个简单的算法,测试集还是通过的(具体数量大对不对我真不知道。。。)
#include<iostream>
using namespace std;
#include<vector>
#include<set>
int main ()
{
int size = 3;
vector<int> weight = {1,4,6};
int count = 0;
set<int> result;
vector<int> temp;
temp.push_back(weight[0]);
result.insert(weight[0]);
for(int i = 1;i < weight.size(); i ++)
{
result.insert(weight[i]);
for(int j = 0; j < temp.size(); j ++)
{
result.insert(weight[i] - temp[j]);
result.insert(temp[j] + weight[i]);
result.insert(-weight[i] - temp[j]);
result.insert(temp[j] - weight[i]);
}
// temp.clear();
temp.assign(result.begin(), result.end());
// cout<<"循环第"<<i<<endl;
// for(auto c : temp)
// {
// cout<<c;
// }
// cout<<endl;
}
for(auto c : temp)
{
if(c>0)
count++;
}
cout<<count;
return 0;
}
步骤就是第一次拿出来
4
然后 4+1 4-1 -4+1 -4-1
把4放进集合
第一次结果为为[-5,-3,1,3,4,5]
第二次拿出来6
然后 6+[-5,-3,1,3,4,5] , 6 - [-5,-3,1,3,4,5] ,-6+[-5,-3,1,3,4,5] , -6 - [-5,-3,1,3,4,5]
把6放进集合
最后把结果>0的元素拿出来计数,结果为10个;