題面:給出 \(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; } }