zoukankan      html  css  js  c++  java
  • Codeforces__Raising Bacteria

    题目传送门: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的数量即可 


  • 相关阅读:
    sql学习2----函数
    网络相关命令
    网络相关概念
    linux学习(2)--指令
    linux学习(1)--基本知识
    Linux学习技巧
    VMware安装Linux
    接口测试
    app测试--DDMS的使用
    app测试--性能测试DDMS
  • 原文地址:https://www.cnblogs.com/Tovi/p/6194857.html
Copyright © 2011-2022 走看看