您的位置:首页 > 编程语言 > Java开发

【华为OJ】201301 JAVA题目0-1级

2016-09-14 17:28 337 查看
输入:待输入整数的个数 整数数组

要求:将输入的整数分为和相同的两组,其中5的倍数的数放在一组,3的倍数(非5的倍数)的在另一组

输出:若能够分组,输出true 若不能,输出false

#include<iostream>
#include<string>
#include<math.h>
using namespace std;
void inc(int* mark, int len);

bool canFind(int *list, int sum,int len) {

int count = (int)pow(2, len);

int*mark = new int[len];

for (int i = 0; i < count; i++) {
int val = 0;
for (int j = 0; j < len; j++) {
if (mark[j] == 1) {
val += list[j];
}
}

if (val == sum) {
return true;
}

inc(mark,len);
}
return false;
}
void inc(int* mark,int len) {
int carry;
int idx = 0;
do {
mark[idx]++;
carry = mark[idx] / 2;
mark[idx] %= 2;
idx++;
} while (carry > 0 && idx < len);
}

int main()
{
int n,fi=0,th=0,ot=0,total=0, total_5 = 0, total_3 = 0, total_le =0 ;
int num_5[100] = {0};
int num_3[100] = {0};
int num_le[100] = { 0 };
cin >> n;
for (int i = 0;i < n;i++)
{
int a;
cin >> a;
total += a;
if (a % 5 == 0)
{
num_5[fi++] = a;
total_5 += a;
}
else if (a % 3 == 0)
{
num_3[th++] = a;
total_3 += a;
}
else
{
num_le[ot++] = a;
total_le += a;
}
}
if (total % 2 != 0)cout << "false" << endl;
else if (total_le == abs(total_3 - total_5)) cout << "true" << endl;
else if (total_le < abs(total_3 - total_5))cout << "false" << endl;
else
{
int aim = total/2-total_5;
if(canFind(num_le, aim,ot)) cout<<"true"<<endl;
else cout << "false"<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: