CF 579A Raising Bacteria

题意:细菌爱好者在盒子里面培养细菌。最初盒子是空的,每天可以往盒子里面添加任意数目的细菌,而且每天每个细菌会分裂成两个。在某一时刻要想获得某一数量的细菌,要求最初放置的最少的细菌数目。

思路: 求出 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;
}
posted @ 2015-09-17 10:20  阿文的博客  阅读(220)  评论(0编辑  收藏  举报