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 }

 

posted @ 2017-09-05 01:44  Leohh  阅读(465)  评论(0编辑  收藏  举报