《切割木棍》

描述

有 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 刀; 依次类推……
以三根木棍举例,切割过程如下图所示:

1.jpg

输入描述

输入一个整数 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值