Lucky Numbers

该文章介绍了一道编程题,目标是在给定的数列范围内找到一个数,使得其分解后的数字之最大值与最小值的差值最大。作者提供了代码实现,通过遍历范围内的数,动态更新最大差值及其对应数值,并在差值达到9时提前结束循环。
摘要由CSDN通过智能技术生成

题目:

 

题意解析:

对于给出的在 l,r 范围的数,求出将数分解之后最大数和最小数的差距最大的值,结果可能会有多个,输出其中一个就行了。

题解:

(1)这个题目就是遍历一遍范围中的数,然后输出结果就行了。但是要注意的一点是,可能会出现时间超限的可能。

(2)这里要处理一下,最大值与最小值的差值最大是9,如果输入的范围很大的话,一定会出现差值为9的情况,这里判断一下,跳出循环就行了。还有就是设置比较的初始值的时候,最好是设置成负数。

代码:

#include<bits/stdc++.h>
using namespace std;
long long int t,n,m;
int difference(long long int k){
	int minn=10,maxx=0;
	while(k>0){
		int l=k%10;
		minn=min(minn,l);
		maxx=max(maxx,l);
		k/=10;
	}
	return maxx-minn;
}
int main() {
	cin>>t;
	while(t--) {
		cin>>n>>m;
		long long int k=-1,l;
		for(long long int i=m;i>=n;i--){
			int shu = difference(i);
			if(k<shu){
				k=shu;
				l=i;
				if(shu==9){
					break;
				}
			}
		}
		cout<<l<<endl;
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值