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; }