题解 | #称砝码#

称砝码

http://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c

https://github.com/ultraji/nowcoder
这个是答案的git地址
利用集合去重的性质
先在集合里面添加0
当第一个砝码进来的时候
{0} 变成 {0,0+1}->{0,1}
当第二个砝码进来之后
{0,1} 变成 {0,1,0+1,1+1}--> {0,1,2}
当第三个砝码进来之后
{0,1,2} 变成{0,1,2,0+2,1+2,2+2}
---》 {0,1,2,3,4}
全部遍历一遍之后结束整个程序即可,这个就是所能得到的所有结果

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


//考点,set
int main(){

    int a[10],N,temp;
    while(cin>>N){
        vector<int> v;
        for(int i =0; i< N;i++){
            cin>>a[i];
        }

        for(int i= 0; i< N;i++){
            cin>>temp;

            for(int j=0; j< temp;j++) v.push_back(a[i]);
        }

        set<int> s;
        s.insert(0); //0也算是一个初始重量

        for(int i=0; i< v.size();i++){//把所有砝码遍历完就行了

            set<int> t(s);//声明这个的目的是为了每次在原来的已有重量进行配对
            for(auto it=t.begin();it!=t.end();it++){
                s.insert(*it+v[i]);
            }
        }

        cout<<s.size()<<endl;

    }




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

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

全部评论

相关推荐

服从性笔试吗,发这么多笔,现在还在发。
蟑螂恶霸zZ:傻 x 公司,发两次笔试,两次部门匹配挂,
投递金山WPS等公司10个岗位 >
点赞 评论 收藏
分享
14 收藏 评论
分享
牛客网
牛客企业服务