华为OJ 201301 JAVA题目0-1级

来源:互联网 发布:java脚本返回上一页 编辑:程序博客网 时间:2024/05/22 12:42
/*编写一个函数,传入一个int型数组,返回该数组能否分成两组,使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),能满足以上条件,返回true;不满足时返回false。*/#include <iostream>#include <vector>#include <algorithm>using namespace std;string myplus(string str)//用于将字符串加1,转换为下一个字符串{int length=str.length();string str1(length,'0');str1[length-1]='1';int flag=0;for(int i=length-1;i>=0;i--){if(str[i]-'0'+str1[i]-'0'+flag>1){str[i]='0';flag=1;}else{char temp;temp=str[i]-'0'+str1[i]-'0'+flag+'0';str[i]=temp;break;}}return str;}bool canFind(vector<int>& ivec,int sum)//判断一个数组中,是否存在一个或几个数的和为一个已知的特定值。用排列组合的方式,如果有n个数,则存在2^n种选择{sort(ivec.begin(),ivec.end());vector<int>::iterator itr=ivec.begin();while(itr!=ivec.end()) if (*itr==sum) return true;int count=ivec.size();string str(ivec.size(),'0');int count1=pow(2.0,count);for(int i=1;i<=count1;i++){int a1=0,b1=0;for(int j=0;j<count;j++){if(str[j]=='0')a1=a1+ivec[j];else if(str[j]=='1')b1=b1+ivec[j];}if(abs(a1-b1)==sum){return true;}str=myplus(str);}return false;}  void FindNum(int *arr,int n, int sum){int begin = 0;int end = n-1;while(begin < end){if(sum == arr[begin]+arr[end]){cout<<"The number is "<<arr[begin]<<" and "<<arr[end]<<endl;return;}else if (sum > arr[begin]+arr[end])begin++;elseend--;}cout<<"Not Find the correct number!"<<endl;}bool getArray(vector<int>& ivec){int len=ivec.size();int i,sum=0,difference;int sumofFive=0,sumofThree=0,sumofOthers=0;int sum1,sum2;vector<int> others;for(i=0;i<len;i++){sum=sum+ivec[i];if(ivec[i]%5==0) sumofFive+=ivec[i];else if(ivec[i]%3==0) sumofThree+=ivec[i];else {others.push_back(ivec[i]); sumofOthers+=ivec[i];}}if (sum%2!=0) return false;else{difference=abs(sumofFive-sumofThree);if(difference==sumofOthers)return true;else if(sumofOthers<difference)return false;else{sum1=(difference+sumofOthers)/2;sum2=(sumofOthers-difference)/2;if(canFind(others,sum2))return true;}}return false;}int main(){vector<int> ivec;int num;cin>>num;int data;for(int i=0;i<num;i++){cin>>data;ivec.push_back(data);}if(getArray(ivec)) cout<<"true"<<endl;else cout<<"false"<<endl;return 0;}

0 0
原创粉丝点击