小红的取数平均--研究了一个下午,终于通过了,暴风哭泣~

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了。

全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务