题解 | #数组分组#

数组分组

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;
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务