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

来源:互联网 发布:时时彩遗漏数据大全 编辑:程序博客网 时间:2024/05/22 12:31

输入:待输入整数的个数 整数数组

要求:将输入的整数分为和相同的两组,其中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;}


0 0