列表

详情


NC218881. 签不上到?做这题就对了

描述

给你一个整数,你可以选择操作一次(也可以不操作)交换该数字中任意两位上的数字,使你的结果数尽可能大。

输入描述

第一行输入一个T,代表测试的数据个数(T<=1000)
接下来T行,每行输入一个整数a (0<a<=1e8)

输出描述

对于输入的T组样例,每一组输出一行你的结果数

示例1

输入:

1
1234

输出:

4231

说明:

显然交换1,4位置上的数字会使结果数最大

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Python3(3.9) 解法, 执行用时: 34ms, 内存消耗: 2760K, 提交时间: 2021-03-07 16:43:17

t = int(input())
while t != 0:
    t -= 1
    s = input()
    xx = int(s)
    for i in range(len(s)):
        for j in range(i + 1, len(s)):
            x = list(s)
            k = x[i]
            x[i] = x[j]
            x[j] = k
            m = int(''.join(x))
            xx = max(xx, m)
    print(xx)

C++(clang++11) 解法, 执行用时: 6ms, 内存消耗: 432K, 提交时间: 2021-03-26 18:17:36

#include <iostream>
using namespace std;
int main()
{
	int n,i,j;
	string a,b,c;
	cin>>n;
	while (n--)
	{
		cin>>a;
		c=a;
		for (i=0;i<a.size();i++)
		{
			for (j=i+1;j<a.size();j++)
			{
				b=a;
				if (b[i]<b[j]) swap(b[i],b[j]);
				if(c<b)	c=b;
			}
		}
		cout<<c<<endl;
	}
}

上一题