You are a lover of bacteria. You want to raise some bacteria in a box.
Initially, the box is empty. Each morning, you can put any number of bacteria into the box. And each night, every bacterium in the box will split into two bacteria. You hope to see exactly x bacteria in the box at some moment.
What is the minimum number of bacteria you need to put into the box across those days?
The only line containing one integer x (1 ≤ x ≤ 109).
The only line containing one integer: the answer.
5
2
8
1
For the first sample, we can add one bacterium in the box in the first day morning and at the third morning there will be 4 bacteria in the box. Now we put one more resulting 5 in the box. We added 2 bacteria in the process so the answer is 2.
For the second sample, we can put one in the first morning and in the 4-th morning there will be 8 in the box. So the answer is 1.
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
int cou = 0;
//如果能整除2就直接除以2,不能整除2就减一再除以2
//中间减了几个1就要就要加多少细菌
while (n) {
if (n % 2) {
n -= 1;
cou++;
}
n /= 2;
}
printf("%d\n", cou);
return 0;
}

本文探讨了一种细菌繁殖的策略,目标是在某一天达到指定数量的细菌。通过最少次数地向培养箱中添加细菌,并利用每晚细菌数量翻倍的特性来实现这一目标。文章提供了具体的算法实现。
193

被折叠的 条评论
为什么被折叠?



