假设分配后已经相等(相加后具有相等初值),
然后依据条件从两个数组中剔除数据,若全部剔除后,两组剩下的数还是相等则认为可以实现
#include<stdio.h> int solu(int N1,int N2,int arr[],int idx,int n); int main(){ int N1 = 0; int N2 = 0; int n; int arr[50]; while(scanf("%d",&n)!=EOF){ for(int i=0;i<n;i++){ scanf("%d",&arr[i]); } int idx = 0; int r = solu(N1,N2,arr,idx,n); if(r>0) printf("true"); else printf("false"); } } int solu(int N1,int N2,int arr[],int idx,int n){ if(idx==n){ if(N1==N2) return 1; else return 0; } else{ if(arr[idx]%5==0){ return solu(N1-arr[idx],N2,arr,idx+1,n); } else if(arr[idx]%3==0){ return solu(N1,N2-arr[idx],arr,idx+1,n); } else{ return solu(N1-arr[idx],N2,arr,idx+1,n)+solu(N1,N2-arr[idx],arr,idx+1,n); } } }