题解 | #数组分组#

数组分组

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

#include <iostream>
#include <vector>
using namespace std;

bool canDevide(const vector<int> &rest,const int &index,const int &sum,const int &diff){
    if(index==rest.size()){
        return sum==diff;
    }

    if(canDevide(rest, index+1, sum+rest[index], diff))
        return true;
    
    return canDevide(rest,index+1,sum-rest[index],diff);
}

int main() {
    int n;
    cin>>n;
    vector<int> rest;
    int diff=0;
    for(int i=0;i<n;++i){
        int t;
        cin>>t;
        if(t%5==0){
            diff+=t;
        }
        else if(t%3==0){
            diff-=t;
        }
        else{
            rest.push_back(t);
        }
    }
    cout<<(canDevide(rest, 0, 0, diff)?"true":"false");
}
// 64 位输出请用 printf("%lld")

递归回溯

先求出3倍数和5倍数的差,剩下的数据每个都是加或减,回溯递归判断最终和是否会是差值

全部评论

相关推荐

思念SiN:你这里没有通过的主要原因应该是计算平均分数的时候,在你贴的代码的第23行: ```c b[i]=(sum-max-min)/(m-2); ``` 等式的右边实际上是两个`int`类型的变量在做除法,C语言里面得到的结果会是这个除法的整数部分,余数部分被舍弃了,也不会自动变成浮点数去做除法。所以虽然你使用了`b[i]`这个浮点数去接收结果,但是等式右边除法是先得到了一个整数,然后再被转换为浮点数再赋值给了`b[i]`。你可以按下面这样,在做除法之前,先进行类型转换,就能得到期望的结果: ```c b[i]=(float)(sum-max-min)/(float)(m-2); ```
点赞 评论 收藏
分享
牛客57020934...:说实话小厂应该也挺喜欢你这种的,看起来能干活,学历不是那种硕博溢价很高,大厂学历卡死了,但社招和中厂可以多试试。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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