201301 JAVA题目0-1级
编写一个函数,传入一个int型数组,返回该数组能否分成两组,使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),能满足以上条件,返回true;不满足时返回false。
第一行是数据个数,第二行是输入的数据
返回true或者false
4
1 5 -5 1
true
解答代码:
#include<iostream> #include<fstream> #include<string> #include<cstring> #include<algorithm> #include<sstream> #include<cmath> using namespace std; int main() { int data; int i,j,n; while(cin >> n) { int sum=0 , sum_5=0 , sum_3=0 , sum_other=0 , positive=0 , negative=0 , temp=0 , dis=0; for(i=0;i<n;i++) { cin >> data; sum+=data; if(data % 5 == 0) sum_5 += data; else if(data % 3 == 0) sum_3 += data; else { if(data > 0) positive+=data; else negative+=data; sum_other+=data; } } dis=abs(sum_5 - sum_3); if((sum_other-dis) %2 ==0) { temp=sum/2; if(temp==(sum_3 + sum_other - ( temp - sum_5 ))) { if(temp-sum_5>=0 && positive>=temp-sum_5 || temp-sum_5<0 && negative<= temp-sum_5) cout<<"true"<<endl; else cout<<"false"<<endl; } else { cout<<"false"<<endl; } } else { cout<<"false"<<endl; } } return 0; }