描述: | 编写一个函数,传入一个int型数组,返回该数组能否分成两组,使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),能满足以上条件,返回true;不满足时返回false。
|
知识点: | 语言基础,字符串,循环,函数,指针,枚举,位运算,结构体,联合体,文件操作,递归 |
题目来源: | 内部整理 |
练习阶段: | 初级 |
运行时间限制: | 10Sec |
内存限制: | 128MByte |
输入: |
输入输入的数据个数 输入一个int型数组 |
输出: |
返回true或者false |
样例输入: | 4 1 5 -5 1 |
样例输出: | true |
答案提示: |
|
源代码:
package issplittwointarray;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int arrayLength = sc.nextInt();
int[] intArray = new int[arrayLength];
for(int i = 0; i < intArray.length; i++){
intArray[i] = sc.nextInt();
}
boolean isSplitTwoEqualArrays = Main.isSplitTwoEqualArray(intArray);
System.out.println(isSplitTwoEqualArrays);
}
public static boolean isSplitTwoEqualArray(int[] intArray){
int multipleOfFiveSum = 0;
int multipleOfThreeSum = 0;
ArrayList<Integer> otherInts = new ArrayList<Integer>();
for(int i = 0; i < intArray.length; i++){
if(intArray[i] % 5 == 0){
multipleOfFiveSum += intArray[i];
} else if(intArray[i] % 3 == 0){
multipleOfThreeSum += intArray[i];
} else {
otherInts.add(intArray[i]);
}
}
int difference = multipleOfFiveSum - multipleOfThreeSum;
ArrayList<Integer> accumulationSum = new ArrayList<Integer>();
accumulationSum.add(0);
for (Integer otherInt : otherInts) {
accumulationSum = Main.expressionsAccumulation(accumulationSum, otherInt);
}
for (Integer sum : accumulationSum) {
if((sum == difference) || (sum == difference * (-1)))
return true;
}
return false;
}
public static ArrayList<Integer> expressionsAccumulation(ArrayList<Integer> preSums, int extraInt){
ArrayList<Integer> accumulationSum = new ArrayList<Integer>();
for (Integer preSum : preSums) {
accumulationSum.add(preSum + extraInt);
accumulationSum.add(preSum - extraInt);
}
return accumulationSum;
}
}
转载于:https://blog.51cto.com/541777359/1533972