题意:细菌爱好者在盒子里面培养细菌。最初盒子是空的,每天可以往盒子里面添加任意数目的细菌,而且每天每个细菌会分裂成两个。在某一时刻要想获得某一数量的细菌,要求最初放置的最少的细菌数目。
思路: 求出 n 的二进制形式中 1 的个数即可。
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
#include<algorithm>
#include<cmath>
#include<map>
using namespace std;
#define INF 0x7fffffff
int main(){
int i,n;
while(scanf("%d",&n) == 1){
int cnt = 0;
int t = 1;
for( ; t <= n ; t *= 2){
if( (t & n) != 0){
cnt++;
n -= t;
}
}
printf("%d\n",cnt);
}
return 0;
}