快去关注乃琳!
1593B
这道题说人话就是给你一个数字,比如123456789,然后让你删掉最少的数字使剩下的数可被25整除。(且第一个数字不为0)
现在我们以123456789为例来解决这个问题。
首先,我们容易想到x00(x为非0整数),25,50,75是可以被25整除的
那么,我们就应该比较容易想到当第i位数和第j位数(j>i)满足(i*10+j)%25==0
也就是说,我们就能至少知道要减去多少位了(虽然不一定最小),为何知道呢?
看图↓:
然后就是找最小,怎么办呢?由题目知:数字最长19位,直接设个初始值使之等于19,然后再用min()就行了
上代码!
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t,cnt,n;
string a;
cin>>t;
while(t--)
{
cnt=19;
cin>>a;
n=a.size();
for(int i=0;i<a.size();i++)//小于a的长度
{
for(int j=i+1;j<a.size();j++)
{
if(((a[i]-'0')*10+(a[j]-'0'))%25==0)
{
cnt=min(cnt,n-i-2);//也就是j-i-1+n-j-1=n-i-2
}
}
}
cout<<cnt<<endl;
}
return 0;
}
结束!