题目
分析
能被25整除的数的特点:末尾以00 50 25 75 结尾;
因此可以先找出数中最末尾的0 5
然后找出0前面最接近0的5 or 0,计算删去0后面的数字和0 与 0 or 5之间的数字;
25 75同上 ,
最后比较以0结尾和以5结尾两种方式哪种删去的数目更少,则输出答案
代码
#include<iostream>
#include<cstring>
#define N 9999999
using namespace std;
string x;
void solve() {
int pos0=-1, pos5=-1,cnt0=N,cnt5=N,post=0;
for(int i=0; i<x.length(); i++) {//记录靠后的0 5 的位置
if(x[i]=='0')
pos0=i;
if(x[i]=='5')
pos5=i;
}
if(pos0!=-1) {//如果有0
for(int i=0; i<pos0; i++) {
if(x[i]=='0' || x[i]=='5') {
post=i;//找50 00
}
}
cnt0=x.length()-post-2;
//计算:其实是这样的:(x.length()-pos0-1)+(pos0-post-1) pos0抵消了
}
if(pos5!=-1) {//同上
for(int i=0; i<pos5; i++) {
if(x[i]=='2' || x[i]=='7') {
post=i;
}
}
cnt5=x.length() -post-2;
}
cout<<min(cnt5,cnt0)<<endl;
}
int main() {
int t;
cin>>t;
while(t--) {
cin>>x;
solve();
}
}