題目連結: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 }