牛客巅峰赛青铜白银组S2第2场
第一题
题意:
牛牛是个非常热心的人,所以他有很多的朋友。这一天牛牛跟他的n个朋友一起出去玩,在出门前牛牛的妈妈给了牛牛k块糖果,牛牛决定把这些糖果的一部分分享给他的朋友们。由于牛牛非常热心,所以他希望他的每一个朋友分到的糖果数量都比牛牛要多(严格意义的多,不能相等)。牛牛想知道他最多能吃到多少糖果?
示例1
输入:
2,10
输出:
2
说明:
牛牛可以分给他的两个朋友各4个糖果,这样他能吃到2个糖果,这样能保证他的每个朋友的糖果数都比他多,不存在牛牛能吃到3个或者以上糖果的情况
示例2
输入:
3,11
输出:
2
说明:
牛牛可以分给他的3个朋友各3个糖果,这样他能吃到2个糖果,这样能保证他的每个朋友的糖果数都比他多,不存在牛牛能吃到3个或者以上糖果的情况
备注:
对于百分之30的数据:1≤n≤100,n≤k≤100
对于百分之100的数据:1≤n≤1e18,n≤k≤1e18
函数有两个long long型参数
第一个参数代表题目中的n
第二个参数代表题目中的k
题解:
第一种解法:
找规律。
- 当糖平均分给每个人(包括自己),剩下的糖数恰好等于朋友数时,这个时候自己不用分享出自己的糖,所以返回平均数。
- 当剩下的糖数小于朋友数时,自己一定要分出一颗糖。
import java.util.*;
public class Solution {
public long Maximumcandies (long n, long k) {
long ave = k / (n + 1) ;
long last = k % (n+1);
if(last == n) return ave;
return ave-1;
}
}
第二种解法:
二分。
import java.util.*;
public class Solution {
public long Maximumcandies (long n, long k) {
long left = 0,right = k,res = 0;
while(left