网易秋招2018笔试题 重排数列

                                                    重排数列

题目要求

小易有一个长度为N的正整数数列A = {A[1], A[2], A[3]..., A[N]}。

牛博士给小易出了一个难题:

对数列A进行重新排列,使数列A满足所有的A[i] * A[i + 1](1 ≤ i ≤ N - 1)都是4的倍数。

小易现在需要判断一个数列是否可以重排之后满足牛博士的要求 

输入描述

输入的第一行为数列的个数t(1 ≤ t ≤ 10),
接下来每两行描述一个数列A,第一行为数列长度n(1 ≤ n ≤ 10^5)第二行为n个正整数A[i](1 ≤ A[i] ≤ 10^9)
/*
*当时做的时候没有理清4跟2的关系,后来看了其他人用C写的,发现原来好简单
*主要思路:1如果数列中没有只能被2整除不能被4整除的数,就判断能被4整除的数量是否大于等于奇数-1
*2如果数列中有只能被2整除不能被4整除的数,就判断能被4整除的数量是否大于等于奇数
*/
import java.util.Scanner;

public class Main1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int numCount=Integer.parseInt(sc.nextLine());
		int[][] numArrs=new int[numCount][];
		for(int i=0;i<numCount;i++){
			int l=Integer.parseInt(sc.nextLine());
			numArrs[i]=new int[l];
			String str=sc.nextLine();
			String[] strArr=str.split(" ");
			for(int j=0;j<strArr.length;j++){
				numArrs[i][j]=Integer.parseInt(strArr[j]);
			}
		}
		for(int k=0;k<numArrs.length;k++){
			if(new Main1().isRight(numArrs[k])){
				System.out.println("Yes");
			}else
				System.out.println("No");
		}
		
	}
	public boolean isRight(int[] numArr){
		int countFour=0;
		int countTwo=0;
		int countOne=0;
		for(int i=0;i<numArr.length;i++){
			if(numArr[i]%4==0){
				countFour++;
			}else if(numArr[i]%2==0){
				countTwo++;
			}else{
				countOne++;
			}
		}
		if(countTwo==0){
			if(countFour>=countOne-1){
				return true;
			}else{
				return false;
			}
		}else{
			if(countFour>=countOne){
				return true;
			}else{
				return false;
			}
		}
	}
}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值