【网易编程题】牛博士给小易出的一个难题

题目:
小易有一个长度为N的正整数数列A = {A[1], A[2], A[3]…, A[N]}。
牛博士给小易出了一个难题:
对数列A进行重新排列,使数列A满足所有的A[i] * A[i + 1](1 ≤ i ≤ N - 1)都是4的倍数。
小易现在需要判断一个数列是否可以重排之后满足牛博士的要求。


思路:
sum初始为0
对每个数字进行统计:

  1. 如果能被4整除,则sum+=2;
  2. 如果不能被4整除,但能被2整除,则记为sum+=1;
  3. 若不能被2整除,则记为sum+=0;

如果最终sum大于等于数组大小,则为Yes,否则为No。别问我为什么,我也是瞎蒙蒙中的。


#include <iostream>
#include <vector>
using namespace std;

bool f(vector<int> &vec){
    int sumof2 = 0;
    for (int i = 0; i < vec.size(); ++i){
        int max = 2;
        while (max && vec[i]%2 == 0){
            sumof2 += 1;
            --max;
            vec[i] /= 2;
        }
    }
    
    return sumof2 >= vec.size();
}

int main(){
    int total;
    cin >> total;
    for (int i = 0; i < total; ++i){
        int n;
        vector<int> vec;
        cin >> n;
        for (int j = 0; j < n; ++j){
            int t;
            cin >> t;
            vec.push_back(t);
        }
        
        if (f(vec)){
            cout << "Yes"<<endl;
        }else{
            cout << "No"<<endl;
        }
        
    }
    
    return 0;
}
发布了92 篇原创文章 · 获赞 2 · 访问量 3403

猜你喜欢

转载自blog.csdn.net/zxc120389574/article/details/105318257