[原题链接)登录—专业IT笔试面试备考平台_牛客网
为了区分小写l与1,以下所有的l均采用大写形式。
Kiki最少要拿k=L个桃,所以我们要分析kiki在拿了L个桃以后到底还要不要继续拿桃子,如果要继续拿,到底要拿多少个才能使kiki得到的桃子最多。 我们可以想到,这道题的本质不就是看[L,r]这个区间是否存在n的倍数。
(1)如果存在,设该n的倍数为dn,那么区间[L,r]一定能取到dn-1,使得Kiki得到的奖励桃为n-1个。
(2)如果不存在,说明[L,r]区间长度小于n,且[L, r]区间在n的两相邻倍数区间内(拿笔一画就能清晰明白),由此可得(L % n)+ (r - L) < n,这时Kiki得到的奖励桃数量与k的取值成正相关,k越大,奖励桃数量越多,而k属于[L,r],所以当 k = r 时,Kiki得到的奖励桃最多,为:(L % n)+(r - L)。
对于以上两种情况,我们只需要判断(L / n)与(r / n)是否相等,相等则表示在同一区间,不相等则不在。
C代码示例:
#include <stdio.h> int main(){ int n,l,r; scanf("%d %d %d",&n,&l,&r); if(l/n==r/n){ printf("%d",l%n+r-l); } else { printf("%d",n-1); } return 0; } |
}