A 牛牛分蛋糕

牛牛分蛋糕

http://www.nowcoder.com/questionTerminal/435b7ac0d7eb4927a0ce4ef2ffcc1385

牛牛分蛋糕 题解(数学方法)

由题可知,每个盘子最少一个,所以a + b < n 时,返回-1;

若要蛋糕数最少的盘子中的蛋糕尽可能多,则应该尽可能平均分配,因此每种蛋糕的盘子数应和蛋糕数成正比,盘子数四舍五入

对某一种蛋糕,最少蛋糕数的最大值为 总蛋糕数 / 盘子数,向下取整

最后结果取较小的那一个

class Solution {
public:
    /**
     * 处理函数,返回在所有分法中,蛋糕数量最少的盘子中分到最多的蛋糕数量
     * @param n int整型 n个盘子
     * @param a int整型 a蛋糕数量
     * @param b int整型 b蛋糕数量
     * @return int整型
     */
    int solve(int n, int a, int b) {
        // write code here
        if (a + b < n) return -1;
        double x = a, y = b;
        int t1 = (x / (x + y)) * n + 0.5; //按蛋糕比例分配盘子,并取四舍五入
        int t2 = n - t1;
        return a / t1 < b / t2 ? a / t1 : b / t2;    //返回平均蛋糕较小的那一个
    }
};
全部评论

相关推荐

无情咸鱼王的秋招日记之薛定谔的Offer:好拒信,偷了,希望有机会用到
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务