描述
有 n 个木棍,长度分别为 1,2,3……n,现在明明有一把刀,每次选定一个长度进行切割,若木棍长度小于选定值则不切割,多个木棍可以同时切割,现在明明想计算至少需要切多少刀可以将所有木棍的长度都变为 0,你能帮明明找找答案吗?
1根木棍(1):以长度1为单位,切 1 刀后长度变为 0;总共至少需要 1 刀;
2根木根(1,2):以长度 1 为单位,切 1 刀后长度变为 0,1,再以长度 1 为单位,切一刀后长度变为 0,0;总共至少需要 2 刀;
3根木棍(1,2,3):以长度 1 为单位,切一刀后长度变为 0,1,2,再以长度 1 为单位,切一刀后长度变为 0,0,1,再以长度 1 为单位,切一刀后长度变为 0,0,0,此种切分总共需要3 刀。若先以长度 2 为单位,切一刀后长度变为 1,0,1,再以长度 1 为单位,切一刀后长度变为 0,0,0,此种切分总共需要 2 刀。所以总共至少需要 2 刀; 依次类推……
以三根木棍举例,切割过程如下图所示:
输入描述
输入一个整数 n,为木棍的个数。
输出描述
输出当所有木棍长度都变为0时至少需要的刀数。
样例输入 1
6
样例输出 1
3
提示
数据规模与约定
对于全部的测试点,保证 1≤n≤1000。
#include<iostream>
using namespace std;
int f(int n){
if(n==1) return 1;
return f(n/2)+1;
}
int main(){
int n;
cin>>n;
cout<<f(n);
return 0;
}