题解 | #数组分组#
数组分组
https://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86
#include <iostream>
#include <vector>
using namespace std;
vector<int> b5;
vector<int> b3;
bool dfs(vector<int> num,int start){
if(start==num.size()){//递归终止条件
int s5=0;int s3=0;
for(int x:b5)
s5+=x;
for(int x:b3)
s3+=x;
if(s5==s3)
return true;
else
return false;
}
b5.push_back(num[start]);//加入数组1
if(dfs(num,start+1))
return true;
b5.pop_back();
b3.push_back(num[start]);//加入数组2
if(dfs(num,start+1))
return true;
b3.pop_back();
return false;//都不行,则返回false
}
int main() {
int n;
cin >> n;
vector<int> num;
for(int i=0;i<n;++i){
int x;
cin >>x;
if(x%5==0)//遇到5或3倍数直接添加进对应数组
b5.push_back(x);
else if(x%3==0)
b3.push_back(x);
else
num.push_back(x);
}
if(dfs(num,0))
cout << "true"<<endl;
else
cout << "false"<<endl;
/*for(int i=0;i<b5.size();++i)
cout << b5[i] << ' ';
cout << endl;
for(int i=0;i<b3.size();++i)
cout << b3[i] << ' ';*/
}
// 64 位输出请用 printf("%lld")
查看4道真题和解析