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

华为OJ 初级:201301 JAVA题目0-1级

2016-07-28 19:34 621 查看
描述
编写一个函数,传入一个int型数组,返回该数组能否分成两组,使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),能满足以上条件,返回true;不满足时返回false。 

知识点字符串,循环,函数,指针,枚举,位运算,结构体,联合体,文件操作,递归
运行时间限制10M
内存限制128
输入输入输入的数据个数

输入一个int型数组

输出返回true或者false

样例输入4 1 5 -5 1
样例输出true
import java.util.ArrayList;
import java.util.Scanner;

public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int length = scanner.nextInt();
int[] numbers = new int[length];
for (int i = 0; i < length; i++) {
numbers[i] = scanner.nextInt();
}
System.out.print(result(numbers));
scanner.close();

}

private static boolean result(int[] numbers) {
int numMultiple5 = 0;   //所有5的倍数的数字的和
int numMultiple3 = 0;   //所有3的倍数的数字的和
ArrayList<Integer> arrayList = new ArrayList<Integer>();  //存储不是3和5的倍数的数

for (int i = 0; i < numbers.length; i++) {
if (numbers[i] % 5 == 0)
numMultiple5 += numbers[i]; //所有5的倍数相加
else if (numbers[i] % 3 == 0 && numMultiple5 % 5 != 0)
numMultiple3 += numbers[i];  //所有3的倍数相加
else
arrayList.add(numbers[i]);  //存储不是3和5的倍数的数
}
//定义j,用来作为遍历arrayList时的指针数
int j = 0;
boolean bool = check(numMultiple3, numMultiple5, arrayList, j);
return bool;
}

private static boolean check(int sum3, int sum5, ArrayList<Integer&
a445
gt; list,
int j) {
if (j >= list.size())  //当j大于list.size(),说明此时list已经遍历完
return sum3 == sum5;
else {
//遍历,将不是3和5的倍数的数,分别跟之前存储的numMultiple3和numMultiple5相加,返回最终相加比较的结果
return check(sum3 + list.get(j), sum5, list, j + 1)
|| check(sum3, sum5 + list.get(j), list, j + 1);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: