题目大意:给一个数字m,将其分为最少的组,使任意组合可以得到小于等于m的所有数。
题解:
这题非常的简单,几乎是秒出结论。
考虑将1-m间的每个数进行二进制分解,那么最少的组数就是m的二进制的位数。
这个结论十分显然。
如果觉得不显然或不相信的可以手算几组。。。
代码:
#include<cstdio> using namespace std; int n,ans; int main(){ scanf ("%d",&n); while (n) n>>=1,++ans; printf ("%d\n",ans); return 0; }