A. Required Remainder
解法很简单,是个人应该都知道
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,x,y;
int t;
cin>>t;
while(t--)
{
cin>>x>>y>>n;
int div=(n-y)/x;
if(div*x+y<=n) cout<<div*x+y<<endl;
else cout<<div*x-y<<endl;
}
return 0;
}
B. Multiply by 2, divide by 6
翻译一下, 就是一个数,你可以将它乘2或者除以6,反正最后要让它变成1,输出最小的操作次数,如果不行输出-1
解法:首先分解质因数,这个数必须只包括2和3,且2的次数必须不大于3的次数。原因很简单,你不能乘3只能乘2,如果2的次数较大的话,怎么样能正好配对除以6呢?
#include <bits/stdc++.h>
using namespace std;
// 18=2*3^2 cnt3-cnt2+cnt3
int main()
{
int n,t;
ios::sync_with_stdio(false);
cin>>t;
while(t--)
{
cin>>n;
int cnt2=0,cnt3=0;
while(n%2==0)
{
cnt2++;
n/=2;
}
while(n%3==0)
{
cnt3++;
n/=3;
}
if(n!=1||cnt2>cnt3)
cout<<"-1"<<endl;
else cout<<2*cnt3-cnt2<<endl;
}
return 0;
}
写作不易,麻烦动个手点个赞,行不?