我在第579/A码中发现了一个问题:
你是细菌的爱好者。你想在盒子里培养一些细菌。 最初,盒子是空的。每天早上,你都可以把任意数量的细菌放进盒子里。每天晚上,盒子里的每一个细菌都会分裂成两种细菌。你希望能在某个时候看到盒子里的x细菌。 在那些日子里,你需要放进盒子里的细菌的最低数量是多少? 输入唯一包含一个整数x的行(1 ≤ x ≤ 109)。 输出唯一包含一个整数的行:答案。 输入:5输出:2注意:对于第一个样本,我们可以在第一天早上在盒子里添加一种细菌,第三天早上,盒子里会有4种细菌。现在我们在盒子里再放一个结果5。我们在这个过程中加入了2个细菌,所以答案是2。
我的问题是,为什么这里使用设置位数来解决这个问题?
发布于 2019-01-11 19:56:03
任何一天的细菌都会变成一、二、四、八等细菌。举个例子,它不会变成三个。它永远是两个人的力量。所以,如果想要的数字不是2的幂,你需要把它作为2的幂之和。这种和中的最小加法量是这样的,即不重复2的幂,每个幂被使用0或1次。将数字表示为2的幂和基本上是将其转换为二进制表示,而计算所使用的二次幂是将二进制数字计数为1。
https://stackoverflow.com/questions/54152969
复制相似问题