题解 | #数组分组#
数组分组
https://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86
#include <iostream> using namespace std; int ar[51];int n,n1,n2;//用n1和n2来收录两组数据 bool dg(int index,int r1,int r2){ if(index==n)return r1==r2;//如果全部遍历完了,判断收录的两组数据是否相等 if(ar[index]==0)return dg(index+1,r1,r2);//如果是0,收录到哪个都一样,免得走两次递归 return dg(index+1,r1+ar[index],r2)||dg(index+1,r1,r2+ar[index]);//收录到r1或者r2其中一个能满足相等即可。 }//递归函数 int main() { cin>>n; for(int i=0;i<n;i++){//输入数据 scanf("%d",&ar[i]); if(ar[i]%5==0){ n1+=ar[i];//如果是5的倍数收录到n1 ar[i]=0;//置为0,防止影响后续递归的判断 }else if(ar[i]%3==0){ n2+=ar[i];//如果是3的倍数收录到n2 ar[i]=0; } } cout<<(dg(0,n1,n2)?"true":"false");//进入递归 }