算法之递归-数组分组


 1 #include
 2 #include
 3 #include
 4 using namespace std;
 5 vector<int> elsevec;
 6 int n,m,sum3,sum5,dis0; 
 7 bool f(int i,int dis){
 8     if(i==elsevec.size()){
 9         return abs(dis)==dis0;
10     }return (f(i+1,dis+elsevec[i])||f(i+1,dis-elsevec[i])); //**重点**
11 }
12 int main(){
13     while(cin>>n){
14         sum3=sum5=0;
15         elsevec.clear();
16         int t=n;
17         while(t--){
18             cin>>m;
19             if(m%5==0){
20                 sum5+=m;    
21             }else if(m%3==0){
22                 sum3+=m;
23             }else{
24                 elsevec.push_back(m);
25             }
26         }dis0=abs(sum5-sum3);    
27         if(f(0,0)){
28             cout<<"true"<<endl;
29         }else cout<<"false"<<endl;
30     }
31     return 0;
32 }