持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情
选择题
编程题
这一题有很多种解法,
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;
}
};