小红的取数平均--研究了一个下午,终于通过了,暴风哭泣~
import java.util.Scanner; import java.util.HashMap; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int t = in.nextInt(); for (int i = 0; i < t; i++) { int n = in.nextInt(); boolean foundEven = false; HashMap<Integer, Integer> freq = new HashMap<>(); for (int j = 0; j < n; j++) { int value = in.nextInt(); freq.put(value, freq.getOrDefault(value, 0) + 1); if (value % 2 == 0) { foundEven = true; } } if (foundEven) { System.out.println("Yes"); // 如果有偶数,直接输出Yes } else { boolean foundPair = false; int countMod1 = 0; // 用于统计4k+1型奇数的数量 int countMod3 = 0; // 用于统计4k+3型奇数的数量 for (Integer key : freq.keySet()) { if (key % 2 != 0) { // 如果key是奇数 if (key % 4 == 1) { countMod1++; } else if (key % 4 == 3) { countMod3++;} } } // 如果两种类型的奇数至少各有一个,那么就存在一对奇数的和为4的倍数 if (countMod1 > 0 && countMod3 > 0) { foundPair = true; } System.out.println(foundPair ? "Yes" : "No"); } } in.close(); } }
会怀疑我自己,这样的人适合找代码工作吗?虽然高薪,但是我写算法能力目前真的不强诶,有点灰心。
这个题的思路:
如果有偶数,因为偶数乘以任何数都是偶数,所以可以直接返回yes。如果全是奇数,那可要注意了!!!
5+5这种不行,平均下来还是5。1+9这种也不行,平均下来还是5。
那什么行呢?
2+6这种行。就是4的倍数。4,8,12这些,除以2之后,还是偶数。那这种数,对于两个奇数的要求就是:一个是4k+1,另一个是4k+3。两个4k+1不行,就比如5和9这种,凑成14了。同理两个4k+3也不行,比如11和7,凑成18了。