贪心。
每次将最后一个非零位加一判断即可。
一开始想少了,只关心把最后一位变成5了,其实可以都变的。
1 #include<bits/stdc++.h> 2 using namespace std; 3 int T,l,r; 4 int add(int x) 5 { 6 int k=1; 7 while(x%10==0)k*=10,x/=10; 8 return k; 9 } 10 int calc(int x) 11 { 12 int k=0,b=0; 13 int y=x; 14 while(y)y/=10,b++; 15 while(x%10==0)x/=10,k++; 16 if(x%10==5)return (b-k)*2-1; 17 else return (b-k)*2; 18 } 19 int main() 20 { 21 // freopen("1.out","r",stdin); 22 // freopen("my.out","w",stdout); 23 scanf("%d",&T); 24 while(T--) 25 { 26 int ans=1e9,pos=0; 27 scanf("%d%d",&l,&r); 28 ans=calc(l);pos=l; 29 while(1) 30 { 31 l+=add(l); 32 if(l>r)break; 33 int tmp=calc(l); 34 if(tmp<ans) 35 { 36 ans=tmp,pos=l; 37 } 38 } 39 printf("%d ",pos); 40 } 41 return 0; 42 }