题解 | #丢棋子问题#

丢棋子问题

http://www.nowcoder.com/practice/d1418aaa147a4cb394c3c3efc4302266



public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 返回最差情况下扔棋子的最小次数
     * @param n int整型 楼层数
     * @param k int整型 棋子数
     * @return int整型
     */
    public int solve (int n, int k) {
        // write code here
        int t = 1 ;
        while(calF(k,t )< n+1){
            t ++;
        }
        return t;
    }
    //k 棋子数
    //t 楼层
    private int calF(int k , int t){
        //棋子数 或楼层数 是 1  则我们最多能测试出来,最高楼层是2层,就是如果1层棋子没碎,那么我们可以最多确认最高能到2层,2层也可能会碎
        if(t == 1 || k == 1){
            return t +1;
        }
        //否则递归 棋子 -1 机会减少1次 ,棋子碎了, 和 棋子 没碎,楼层数少测一层
        return calF(k - 1, t -1) + calF(k, t-1);
    }
}
全部评论

相关推荐

10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务