题解 | #数组分组#

数组分组

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

  1. 这个题首先是,咱们可以把3的倍数都加起来,然后把5的倍数都加起来。然后取绝对值。让剩下的两组数看看是不是能组成目标绝对值就好。
  2. 关键的算法是剩下的数能不能组成对应的绝对值,画个树就知道f在什么了。
#include<bits/stdc++.h>
using namespace std;
int sum5=0, sum3 =0,dis5_3 = 0;
vector<int> arr;

//判断能否构成
bool f(int i, int dis){

    //如果这个数组里都是3,或者是5的倍数(或者是arr中有内容,然后最后判断有没有值等于绝对值)
    if(i==arr.size()){
        return abs(dis) == dis5_3;
    }else{
        return f(i+1, dis+ arr[i]) || f(i+1, dis-arr[i]);//计算数组绝对值是不是有固定数的方法
    }


}


int main(){
    int n,x;
    while(cin>>n){
        arr.clear();
        sum5=0, sum3 =0;
        for(int i=0; i< n;i++){
            cin>>x;

            if(x%5==0){//五得倍数
                sum5+=x;
            }else if(x%3==0){//3的倍数
                sum3+=x;
            }else{
                arr.push_back(x);//其他数
            }
        }

        dis5_3 = abs(sum5-sum3); 
        if(f(0,0)){
            cout<<"true"<<endl;
        }else{
            cout<<"false"<<endl;
        }


    }

    return 0;

}
大厂笔试题题解 文章被收录于专栏

主要是公司笔试题得一些总结

全部评论

相关推荐

不愿透露姓名的神秘牛友
10-12 10:48
已编辑
秋招之苟:邻居家老哥19届双2硕大厂开发offer拿遍了,前几天向他请教秋招,他给我看他当年的简历,0实习实验室项目技术栈跟开发基本不沾边😂,我跟他说这个放在现在中厂简历都过不了
点赞 评论 收藏
分享
3 收藏 评论
分享
牛客网
牛客企业服务