48天笔试强训——第15天

104 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情


选择题

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

编程题

查找输入整数二进制中1的个数

这一题有很多种解法,x=x&(x-1),当x为0的时候,我们计算它循环了多少次,就是1的个数。注意多组输入

#include <iostream>
using namespace std;

int main() {
    int x,sum;
    sum=0;
    while (cin >> x) { 
        sum=0;
        while(x)
        {
            x=x&(x-1);
            sum++;
        }
        cout<<sum<<endl;
    }
}

手套

看到这个题目,大家可能是懵逼的状态,对于该道题,我们的思路是:拿左手套为例,我们把左手套所以的颜色的个数相加,然后减去颜色个数最少的那个,再加上1,那么最后得到的结果肯定包含所有的颜色。右手套也这么处理。最后比较左右哪个最小,最小的那个加1就是要拿的手套总数。但是要处理其中一个颜色没有,另一个颜色有的情况。这样的手套不能遵守上面的规则。我们最后的总数要加上不遵守规则的手套。

class Gloves {
public:
    int findMinimum(int n, vector<int> left, vector<int> right) {
        int sum=0;
        int left_sum=0,right_sum=0;
        int left_min=100,right_min=100;
        for(int i=0;i<n;++i)
        {
            if(left[i]*right[i]==0)
            sum+=left[i]+right[i];
            else
            {
                left_sum+=left[i];
                right_sum+=right[i];
                left_min=min(left_min,left[i]);
                right_min=min(right_min,right[i]);
            }
        }
        return sum+min(left_sum-left_min+1,right_sum-right_min+1)+1;
    }
};