200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 华为 oj java题库_华为OJ 01 JAVA题目0-1级

华为 oj java题库_华为OJ 01 JAVA题目0-1级

时间:2020-02-14 14:15:40

相关推荐

华为 oj java题库_华为OJ 01 JAVA题目0-1级

/*

编写一个函数,传入一个int型数组,返回该数组能否分成两组,

使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,

所有3的倍数在另一个组中(不包括5的倍数),能满足以上条件,返回true;

不满足时返回false。

*/

#include

#include

#include

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& ivec,int sum)//判断一个数组中,是否存在一个或几个数的和为一个已知的特定值。用排列组合的方式,如果有n个数,则存在2^n种选择

{

sort(ivec.begin(),ivec.end());

vector::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

{

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<

return;

}

else if (sum > arr[begin]+arr[end])

begin++;

else

end--;

}

cout<

}

bool getArray(vector& ivec)

{

int len=ivec.size();

int i,sum=0,difference;

int sumofFive=0,sumofThree=0,sumofOthers=0;

int sum1,sum2;

vector others;

for(i=0;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

return false;

else

{

sum1=(difference+sumofOthers)/2;

sum2=(sumofOthers-difference)/2;

if(canFind(others,sum2))

return true;

}

}

return false;

}

int main()

{

vector ivec;

int num;

cin>>num;

int data;

for(int i=0;i

{

cin>>data;

ivec.push_back(data);

}

if(getArray(ivec)) cout<

else cout<

return 0;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。