题目描述
输入int型数组,询问该数组能否分成两组,使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),不是5的倍数也不是3的倍数能放在任意一组,可以将数组分为空数组,能满足以上条件,输出true;不满足时输出false。
数据范围:每个数组大小满足 1<=n <=50
输入格式
第一行是数据个数,第二行是输入的数据
输出格式
返回true或者false
输入样例
在这里给出一组输入。例如:
4
1 5 -5 1
输出样例
在这里给出相应的输出。例如:
true
说明:
第一组:5 -5 1
第二组:1
AC code
/// 6-4 数组分组
#include <bits/stdc++.h>
using namespace std;
bool canBeSub(vector<int> vec, int x)
{
for(int i=0; i<vec.size(); i++)
{
if(x%vec[i]==0)
{
x = x-vec[i];
if(x==0)
return true;
}
}
return false;
}
int main()
{
int n;
cin>>n;
int sum5 = 0;
int sum3 = 0;
int sum = 0;
int num;
vector<int> vec;
for(int i=0; i<n; i++)
{
cin>>num;
if(num%5==0)
sum5 += num;
else if(num%3==0)
sum3 += num;
else
{
sum += num;
vec.push_back(num);
}
}
if((sum-sum5+sum3)%2==0 && canBeSub(vec, (sum-sum5+sum3)/2))
cout<<"true"<<endl;
else
cout<<"false"<<endl;
return 0;
}