题解 | #数组分组#

数组分组

https://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86

#include <bits/stdc++.h>
#include <algorithm>
using namespace std;

bool divided(vector<int> nums, int target, int index) {
    
    if(index == nums.size() && target == 0) {
        return true;
    }
    if(index >= nums.size() && target != 0) {
        return false;
    }

    bool way1 = divided(nums, target-nums[index], index+1);

    bool way2 = divided(nums, target+nums[index], index+1);

    return way1||way2;
}

int main() {
    int n = 0;
    cin >> n;
    vector<int> numsFive;
    vector<int> numsThree;
    vector<int> numsNormal;
    for(int i = 0; i < n; i++) {
        int numTemp = 0;
        cin >>numTemp;
        if(numTemp%5 == 0) {
            numsFive.push_back(numTemp);
        }
        else if(numTemp%3 == 0) {
            numsThree.push_back(numTemp);
        }
        else {
            numsNormal.push_back(numTemp);
        }
    }
    int sumFive = 0, sumThree = 0;

    for(int numFive : numsFive) {
        sumFive += numFive;
    }

    for(int numThree : numsThree) {
        sumThree += numThree;
    }

    int target = abs(sumFive-sumThree);

    bool result = divided(numsNormal, target, 0);
    if(result) cout << "true" << endl;
    else cout << "false" << endl;

}
// 64 位输出请用 printf("%lld")

1.输入时把数据分为3组,5的倍数(第一组),3的倍数(不是5的倍数)(第二组),既不是3的倍数也不是5的倍数(第三组)

2.第三组分成两组使第一组和第二组数值相等,相当于将第三组的数据做“+”或“-”等于第一组与第二组的差值

3.递归做判断

全部评论

相关推荐

点赞 评论 收藏
分享
废铁汽车人:秋招真是牛鬼蛇神齐聚一堂
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务