R - 鬼谷子的钱袋(思维数学)

https://vjudge.net/contest/286678#problem/R
题意为给你一个数,把它分割为多少个数能任意组成1-n的所有数
二进制思想
要选的数一定为1 2 4 8 16 2^k·········
一共k+1个数
那么为什么呢
因为 比如 一个数的二进制某位为 1 2 4 8 16····它一定能任意相加,因为任意的某位能组成任意的能组成任意的二进制数
代码如下

#include
using namespace std;
int main()
{
    int m;
    scanf("%d",&m);
    cout<<(int)log2(m)+1<<'\n';
    return 0;
}

你可能感兴趣的:(题目)