BZOJ 1192 [HNOI2006]鬼谷子的钱袋:二进制 砝码称重问题
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1192
题意:
鬼谷子带了a元钱,他要把a元钱分装在小袋子中,使得任意不大于a的数目的钱,都能用几个小袋子凑出来。
问你最少用几个小袋子。
题解:
砝码称重问题(二进制):
你可以自由设置砝码的数量和重量,使得a以内的任意重量都能被称出(只考虑砝码叠加),问你最少的砝码数量。
例如a = 48时,砝码为:1,2,4,8,16,17.
所以砝码数量 = a二进制下的位数
这道题一样啊,算二进制位数就好啦。
水吧。。。(*/ω\*)
AC Code:
1 #include <iostream> 2 #include <stdio.h> 3 #include <string.h> 4 5 using namespace std; 6 7 int a; 8 int cnt=0; 9 10 int main() 11 { 12 cin>>a; 13 while(a) 14 { 15 a>>=1; 16 cnt++; 17 } 18 cout<<cnt<<endl; 19 }