思路:对于一个数,只要它能被2整除,就一定不是开心的数,否则就需要除以2。因此,我们可以遍历整个数组,对于每一个数,判断是否能被2整除,如果不能,就将它除以2,并记录下操作次数。最后判断数组的和是否为偶数,如果是,则返回操作次数,否则返回-1。

代码如下:

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> arr(n);
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }

    int count = 0;
    for (int i = 0; i < n; i++) {
        if (arr[i] % 2 != 0) {
            arr[i] /= 2;
            count++;
        }
    }

    int sum = 0;
    for (int i = 0; i < n; i++) {
        sum += arr[i];
    }

    if (sum % 2 == 0) {
        cout << count << endl;
    } else {
        cout << -1 << endl;
    }

    return 0;
}
C++ 数组除2操作,最小次数得到开心数

原文地址: https://www.cveoy.top/t/topic/ord1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录