题面:给出 \(x\),\(y\) 和 \(n\), 找到最大的 \(k\) 知足 \(0\le k\le n\) 且 \(k \mod{x}=y\) 。c++
咱们考虑从取模的性质下手。spa
首先来分析 \(x=7,y=5,n=12345\) 这组数据,\(12345\mod7\) 比 \(5\) 小,因此考虑减去 \((n \mod{x})+x-y\) ,即须要减去的最小值,由于 \(n \mod{x}\) 要余 \(y\) 的话确定只能减不能增,要减去的就是取模后的结果加模数减去余数。code
接着分析 \(x=5,y=0,n=4\) ,由于 \(x>n\) ,因此输出 \(y\) 便可。ci
而后若是 \(n\mod{x}>y\) 时,便只用减去 \(y\) 便可。it
代码就先放着,反正看懂题解的也不须要代码。class
#include <bits/stdc++.h> using namespace std; int main(){ int T; cin>>T; while(T--){ int x,y,n,k=0; cin>>x>>y>>n; if(x>n) cout<<y<<endl; else if(n%x<y)cout<<n-(n%x+x-y)<<endl; else cout<<n-(n%x-y)<<endl; } }