题目
思路:
按照我的思路这一题应该是这样子的
剔除+判断
剔除
因为后面的0要越多越好,所以我们我们判断0出现的情况,当2个数之间的差大与10是,证明2个之间会存在一个0,因为位置在前的都可以剔除,那么位置在后的也可以剔除,但是我们在剔除是要注意
e.g
145 160
由于2个数之间差大于10
所以就会被我处理成14 16
那么我们所需要的数就在14~16之间,但很明显的,我们不能选14,因为140不满足条件,所以在剔除数时,我们要记录我们所剔除掉的数是不是为0,如果存在不是0的,那么我们后面就要对14++即15,我们所要找到值也就是在15~16之间即150
while(m>=10&&m>=10&&n-m>=10)//1.剔除+判断
{
if(m%10!=0) x1=true;
m=m/10;
n=n/10;
len3++;
len4++;
}
if(x1==true)//对范围的影响
{
m+=1;
}
接下来我们要做的就是进行特判处理
1.存在5的整10或整100数,我们可以通过计算很容易得出,这类数是长度最小的,所以我们放到第一个进行特判
我们记录输入2个数的长度,在这个长度的条件下去寻找,如果一个关于5的整10整100数成立,立刻输出(我就是这一步错了,导致只有50分,因为我在判断时,第一种情况就是50,结果我这么知道有50%的数据 都考到了这个点...)
int ans=5;
for(int i=1;i<=len2;i++)//计算是否有5的整数混在其中
{
if(ans>=x&&ans<=y)
{
cout<<ans<<endl;
fin=1;
break;
}
ans*=10;
}
2.由于关于5的整的都被我们判断完了,那么我们现在就是处理x的长度不等于y的长度的情况,在这种情况下,我们就只需要找到最小整10或整100..的就可以啦
同样我们在处理时,也要考虑2位数或更多位数其除了首位数以外对数字的影响
if(fin==0&&len1!=len2)
{
while(x>0)
{
if(x%10!=0&&x>10) y2=true;
haha=x;
x=x/10;
}
if(y2==true) haha+=1;
for(int i=1;i<len1;i++)
{
haha*=10;
}
cout<<haha<<endl;
fin=1;//对后面的判断有用
}
3.考虑长度相同的2个数,虽然这2个数已经被我剔除的差不够10了,但是其数字之间也是可以存在整10的,例如18 26..
而且期间也可能出现末尾是5的,那么这里我们就要纠结一下,到底是5优还是0优,0啦如上面的例子20 和25 一个的荒谬值为2,一个为3
所以最后一个特判也就如下,如果这2种情况都不存在,那就是最小的值
else if(fin==0&&len1==len2)
{
for(int i=m;i<=n;i++)
{
if(i%10==0)
{
int d=i;
for(int j=1;j<=len3;j++)
{
d*=10;
}
cout<<d<<endl;
fin=1;
break;
}
}
if(fin==0)
for(int i=m;i<=n;i++)
{
if(i%5==0)
{
int d=i;
for(int j=1;j<=len3;j++)
{
d*=10;
}
cout<<d<<endl;
fin=1;
break;
}
}
if(fin==0)
{
int d=m;
for(int j=1;j<=len3;j++)
{
d*=10;
}
cout<<d<<endl;
}
}
#include<bits/stdc++.h>
using namespace std;
int T;
int x,y;
bool x1=false;
bool y2=false;
int len1,len2,fin;
int main()
{
//freopen("Price.in","r",stdin);
// freopen("Price.out","w",stdout);
cin>>T;
while(T--)
{
scanf("%d%d",&x,&y);
x1=false;y2=false;
fin=0;
int star,len,len3,len4,m,n;
len1=0;
len2=0;
len3=0;
len4=0;
m=x;
n=y;
while(m>0)
{
m=m/10;
len1++;
}//计算长度
while(n>0)
{
n=n/10;
len2++;
}
m=x;
n=y;
while(m>=10&&m>=10&&n-m>=10)//1.剔除+判断
{
if(m%10!=0) x1=true;
m=m/10;
n=n/10;
len3++;
len4++;
}
if(x1==true)//对范围的影响
{
m=m+1;
}
len=min(len1,len2);
int ans=5;
for(int i=1;i<=len2;i++)//计算是否有5的整数混在其中
{
if(ans>=x&&ans<=y)
{
cout<<ans<<endl;
fin=1;
break;
}
ans*=10;
}
int haha=0;
if(fin==0&&len1!=len2)
{
while(x>0)
{
if(x%10!=0&&x>10) y2=true;
haha=x;
x=x/10;
}
if(y2==true&&len1!=1) haha+=1;
for(int i=1;i<len1;i++)
{
haha*=10;
}
cout<<haha<<endl;
fin=1;
}
else if(fin==0&&len1==len2)
{
for(int i=m;i<=n;i++)
{
if(i%10==0)
{
int d=i;
for(int j=1;j<=len3;j++)
{
d*=10;
}
cout<<d<<endl;
fin=1;
break;
}
}
if(fin==0)
for(int i=m;i<=n;i++)
{
if(i%5==0)
{
int d=i;
for(int j=1;j<=len3;j++)
{
d*=10;
}
cout<<d<<endl;
fin=1;
break;
}
}
if(fin==0)
{
int d=m;
for(int j=1;j<=len3;j++)
{
d*=10;
}
cout<<d<<endl;
}
}
}
return 0;
}
/*
思路:
从最后一位开始比较
如果前面的不同且包含5
就选择5
否则就选择整10数...
*/