题解 | #数组分组#
数组分组
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");//进入递归
}

