• 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的数量即可 


  • 相关阅读:
    课程设计第三次实验总结
    课程设计第二次实验总结
    2019春第一次课程设计实验报告
    第十二周作业
    第十一周作业
    第十周作业
    第九周作业
    第八周作业
    第七周作业
    第六周作业
  • 原文地址:https://www.cnblogs.com/Tovi/p/6194857.html
Copyright © 2020-2023  润新知