import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 创建一个Scanner对象,用于读取用户输入
Scanner scanner = new Scanner(System.in);
// 读取测试用例的数量
int T = scanner.nextInt();
// 创建一个ArrayList,用于存储每个测试用例的结果
ArrayList<Integer> arrayList = new ArrayList<Integer>();
// 初始化一个空的整型数组
int[] arr = new int[0];
// 遍历每个测试用例
for (int i = 0; i < T; i++) {
// 读取当前测试用例的整数个数
int p = scanner.nextInt();
// 初始化奇数和偶数的计数器
int o = 0; // 必须在第一个for里
int g = 0;
// 遍历当前测试用例的整数
for (int j = 0; j < p; j++) {
// 重新初始化数组,大小为p
arr = new int[p];
// 读取当前整数并存入数组
arr[j] = scanner.nextInt();
// 判断当前整数是奇数还是偶数,并更新计数器
if (arr[j] % 2 == 0) {
++o;
} else {
++g;
}
}
// 如果奇数个数为奇数,则结果为0
if (g % 2 == 1) arrayList.add(0); // 奇数个奇数直接为0
else arrayList.add(f(o, g)); // 偶数个奇数 偶数倍的往出拿 利用二项式系数可知 2^(n-1)
}
// 输出每个测试用例的结果
for (int i = 0; i < T; i++) {
System.out.println(arrayList.get(i));
}
}
// 定义一个方法,计算2的x+y-1次方对1000000007取模的结果
public static int f(int x, int y) {
int res = 0;
if (y == 0) y = 1; // 如果y为0,将其设为1,避免除以0的错误
res = (int) ((Math.pow(2, x + y - 1)) % 1000000007); // 计算2的x+y-1次方对1000000007取模的结果
return res;
}
}
数组分割(蓝桥复习)
本文介绍了一个Java程序,通过Scanner读取测试用例,统计整数中奇数和偶数的数量,根据奇数个数的奇偶性计算结果,涉及到二项式系数计算和取模运算。
摘要由CSDN通过智能技术生成