重排数列--是否存在排列,排列后数组的每两个相邻元素的乘积都是4的倍数

i从0到n-1,是否存在排列,使得a[i]*a[i+1]的值都是4的倍数

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        int m, n;
        int[] arr;
        Scanner sc = new Scanner(System.in);
        m = sc.nextInt();
        for (int i = 0; i < m; i++) {
            n = sc.nextInt();
            arr = new int[n];
            //记录能被4整除的个数,能被2整除的个数以及奇数的个数
            int c4 = 0, c2 = 0, c1 = 0;
            for (int j = 0; j < n; j++) {
                arr[j] = Integer.parseInt(sc.next());
                if (arr[j] % 4 == 0) c4++;
                else if (arr[j] % 2 == 0) c2++;
                else c1++;
            }//for j
            if (c4 >= n / 2 || c4 >= c1) {//要么4的倍数的元素个数大于等于数组长度的一半(下取整),
                //要么4的倍数的元素个数大于等于奇数元素的个数
                System.out.println("yes");
            } else
                System.out.println("no");
        }//for i
    }//main
}

//4 //4组数
//4 //第一组4个元素
//3 3 4 4 //第一组的元素值
//yes //第一组的结果
//4 //第二组4个元素
//2 2 4 4
//yes
//5
//1 3 5 4 12
//yes
//4
//1 2 3 4
//no

//比如:1 3 5 4 12
//存在排列:1 4 3 12 5,这样1*4,4*3,3*12,12*5均是4的倍数
//比如:1 2 3 4
//不存在该排列






你可能感兴趣的:(Java,算法,面试)