题解 | #数组分组#
数组分组
http://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86
- 输入数组总和记为sum,5的倍数和记为g5,不为5和3的倍数的数,即可任意分组的数存在g容器;
- sum若为奇数则无法实现分组,输出false;
- 定义 int a = sum/2 - g5,在g容器中找到组合的数和为a即可满足题意(sum_temp==a)。
- 利用递归,依次选择或者不选择g[k],即临时变量sum_temp为加与不加g[k],k+1;
#include <bits/stdc++.h>
using namespace std;
bool Judge(vector<int>& g, int a, int k, int temp_sum) {
if (a == temp_sum) return true;
else if ( k == g.size() ) return false;
return Judge(g, a, k + 1, temp_sum + g[k]) || Judge(g, a, k + 1, temp_sum);
}
int main() {
int nn, sum = 0, g5 = 0;
cin >> nn;
vector<int> g;
for (int i = nn; i > 0; i--) {
cin >> nn;
if (nn % 5 == 0) g5 += nn;
else if (nn % 3 != 0)
g.push_back(nn);
sum += nn;
}
if (sum % 2 != 0) cout << "false";
else {
int a = sum / 2 - g5;
if (Judge(g, a, 0, 0))
cout << "true";
else cout << "false";
}
return 0;
}