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; //返回平均蛋糕较小的那一个
}
};
查看20道真题和解析