思路
这个可以大大题分为两种情况,一种是l到r没有a的倍数另一种是l到r存在a的倍数,对于第一种分析一下就知道去r就是最大的,对于第二种找一个余数最大(余数最大为a-1)的即为(r/a-1)×a+a-1和位于r上的比较大小,前提是 l 必须小于(r/a-1)×a+a-1不然取不到
代码
#include<cstdio>
using namespace std;
int max(int x,int y)
{
return x>y?x:y;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int l,r,a;
scanf("%d%d%d",&l,&r,&a);
int res=r/a+r%a;
int len=r/a;
if(l<=(len-1)*a+a-1)
{
int t=(len-1)*a+a-1;
res=max(t/a+t%a,res);
}
printf("%d\n",res);
}
}