题解 | #数组分组#
数组分组
https://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86
#include <iostream>
#include <vector>
using namespace std;
int vecSum(vector<int> &n)
{
int result = 0;
for(auto &i:n)
{
result+=i;
}
return result;
}
bool findResult(vector<int> &oset,vector<int> & vec5,vector<int> &vec3,int i)
{
if(i==oset.size())
{
if(vecSum(vec3)==vecSum(vec5))
return true;
return false;
}
vec3.push_back(oset[i]);
bool flag = findResult(oset, vec5, vec3, i+1);
vec3.pop_back();
vec5.push_back(oset[i]);
bool flag1 = findResult(oset, vec5, vec3, i+1);
vec5.pop_back();
if(flag||flag1)
return true;
return false;
}
bool ifDivideTwo(vector<int> &r)
{
vector<int> vec5;
vector<int> vec3;
vector<int> oset;
for(auto &i:r)
{
if(i%5==0)
vec5.push_back(i);
else if(i%3==0)
vec3.push_back(i);
else
oset.push_back(i);
}
int index = 0;
int i = 0;
return findResult(oset,vec5,vec3,i);
}
int main() {
int n;
cin>>n;
vector<int> r;
for(int i = 0;i!=n;++i)
{
int t;
cin>>t;
r.push_back(t);
}
if(ifDivideTwo(r))
cout<<"true";
else
cout<<"false";
}
// 64 位输出请用 printf("%lld")
回溯法,分为两种情况,该值分配给3的数组,或者5的数组
安克创新 Anker公司福利 911人发布