华为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
- 华为OJ 201301 JAVA题目0-1级
- 201301 JAVA题目0-1级 华为OJ
- 【华为OJ】201301 JAVA 题目0-1级
- 华为oj 201301 JAVA题目0-1级
- 【华为OJ】【104-201301JAVA题目0-1级】
- 华为OJ 初级:201301 JAVA题目0-1级
- 华为OJ——201301 JAVA题目0-1级
- 【华为OJ】201301 JAVA题目0-1级
- 华为oj初级 201301 JAVA题目0-1级
- 【华为OJ】【059-201301-JAVA-题目2-3级】
- 华为OJ——201301 JAVA 题目2-3级
- 华为oj中级 201301 JAVA 题目2-3级
- OJ-----201301 JAVA题目0-1级
- 华为OJ——201301 JAVA 题目2-3级(棋盘走法)
- 华为oj题目 DNA序列 [java语言]
- 华为OJ题目 句子逆序 java
- 华为oj题目(java版)
- 华为OJ一个题目
- LINUX内核升级 - 更新硬盘驱动
- mysql 插入不了中文
- Objective - C基础: 第二天 - 1.封装思想初认识之set和get方法
- Unity回顾3
- 线性变换之缩放
- 华为OJ 201301 JAVA题目0-1级
- ios使用代理的时候一定要用weak
- 信息类专业国际会议/期刊影响因子汇总
- SharedPreferences的使用
- android out of memory(OOM)产生原因
- 黑马程序员——Java基础---抽象类和接口的区别
- Android ViewPager用法
- zoj1586 QS Network(最小生成树)
- c语言中注意细节