描述 | |
---|---|
知识点 | 字符串,循环,函数,指针,枚举,位运算,结构体,联合体,文件操作,递归 |
运行时间限制 | 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> 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);
}
}
}