您的位置:首页 > 大数据 > 人工智能

Codeforces__Raising Bacteria

2015-09-21 19:08 555 查看
题目传送门:Raising Bacteria

//问题描述:一个盒子里面放一个细菌在一天可以增生两个细菌。 现在已知盒子里面细菌的个数,问你最初放多少个细菌可以增生盒子里面的细菌数量
//输入:盒子中细菌的数量
//输出:最初至少放的细菌数量
//算法分析:从2开始累乘过程计数!

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

typedef long long  LL ;

int jisuan(LL n)
{
int num = 0;
LL flag = 2;
while (1)
{
if (n == 1)
{
num ++ ;
break;
}
flag = 2;
while (flag < n)
{
flag = flag * 2;
}
if (flag == n)
{
num ++ ;
break;
}
else
{
flag = flag / 2;
n = n - flag;
num ++ ;
}
}
return num ;
}

int main()
{
LL n;
while (cin >> n)
{
cout << jisuan(n) << endl;
}
return 0;
}

//本题可以用位运算来求解,每次数量翻倍,都会左移。1的数量会保持不变,也就是1的数量一定是添加进去的,即数二进制1的数量即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: