题解 | #数组分组#
数组分组
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的数组