怪盗基德的挑战

怪盗基德的挑战

怪盗基德是一名出色的数字盗贼,擅长窃取珍贵的数字宝藏。在密室的中央,基德看到了一个巨大的保险箱,里面藏着数字宝藏。
然而,基德发现这个保险箱上有一个巧妙的密码锁。密码锁的规则是这样的:只有通过交换数字中的两位,才能打开保险箱。基德明白,他只有一次机会交换数字中的任意两位,以得到最大的数字宝藏。
基德开始思考如何利用这次交换机会来获取最大的数字宝藏。他知道,这个数字宝藏是一个正数,并且它的数字位数不会超过一百位数
现在,你有机会像基德一样挑战自己。给定一个正数 x,你至多可以交换一次数字中的任意两位。你能得到的最大值是多少呢?

输入说明

输入一个正数 x。

输出说明

能够得到的最大数。

时间限制

1.000 秒

内存限制

25600 kb

样例输入1

复制

2736

样例输出1

7236

样例输入2

复制

9999

样例输出2

9999
#include <bits/stdc++.h>
using namespace std;
string max(string num) {
    int n = num.size();
    map<char, int> last;
    for (int i = 0; i < n; i++) {
        last[num[i]] = i;
    }
    for (int i = 0; i < n; i++) {
        for (char d = '9'; d > num[i]; d--) {
            if (last.find(d) != last.end() && last[d] > i) {
                swap(num[i], num[last[d]]);
                return num; 
            }
        }
    }
    return num;
}

int main() {
    string x;
    cin >> x; 
    cout << max(x) << endl;
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值