分组求和

201301 JAVA题目0-1级

http://www.nowcoder.com/questionTerminal/9af744a3517440508dbeb297020aca86

#include<iostream>
#include<algorithm>
#include<vector>
#include<numeric>
using namespace std;
int main()
{
    int n, m;
    while (cin>>n){
        int error = 1;
        int sum3 = 0,sum5 = 0,sumoth=0;
        vector<int> v;
        for (int i = 0; i < n; i++){
            cin >> m;
            if (m % 5 == 0) sum5 += m;
            else if (m % 3 == 0) sum3 += m;
            else{
                v.push_back(m);
                sumoth += m;
            }
        }
        /*判断有没有解,和为奇数则没有解*/
        if ((sum3 + sum5 + sumoth) % 2 != 0) goto False;
        do{
            for (int i = 0;i < v.size(); i++){
                /*全排列不是5和3的倍数的数,分组求和,利用数学x3+a=y5+b转为|x3-x5|=|a-b|来判断是否存在解*/
                if (abs(accumulate(v.begin(), v.begin() + i, 0) - accumulate(v.begin() + i, v.end(), 0)) == abs(sum3 - sum5)){
                    error = 0;
                    goto True;
                };
            }
        } while (next_permutation(v.begin(), v.end()));
        False:
            if(error==1) cout << "false" << endl;
        True:
            if(error==0) cout << "true" << endl;
    }
}
全部评论
2 5 -5 测试用例跑不过
点赞 回复 分享
发布于 2021-11-21 14:36
楼主没有处理输入数字全部为3或者5倍数的情况,此时v.size() == 0,do-while循环不执行。应该在do-while循环外部增加v.size() > 0 判断条件,与其并列的else分支处理:if(nSum3 == nSum5) error = 0 ;goto True;
点赞 回复 分享
发布于 2021-11-21 15:13

相关推荐

评论
9
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务