BZOJ 1192 [HNOI2006]鬼谷子的錢袋:二進位制 砝碼稱重問題

Leohh發表於2017-09-05

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

 

相關文章