题意:给一个字符串,交换其中两个数字,使得新的串形成的整数小于原来的串形成的整数,并且这个新串形成的整数是小于原来串形成的整数的中的最大值;
这道题。我的队友找了半天的规律,结果发现数据很小,直接枚举暴力就过了;
枚举每种交换数字的情况,比大小(因为在两个串长度相等的时候,用字典序比较就相当于整数的小的比较了),同时剔除前导0;
时间复杂度才o(n^2)所以暴力就过了;
AC代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
char s[200];
cin>>s;
int len=strlen(s);
char tt[200];
char ans[200]="0";//置为0串
for(int i=0;i<len;i++){
for(int j=i+1;j<len;j++){
strcpy(tt,s);//枚举每种情况
char ch=tt[i];
tt[i]=tt[j];
tt[j]=ch;
//cout<<tt<<endl;
if(tt[0]=='0')continue;
if(strcmp(s,tt)>0){//如果原串形成的整数小
if(strcmp(tt,ans)>0)strcpy(ans,tt);//这里是取满足条件的最大整数值,用的char数组存的
}
}
}
if(ans[0]=='0')puts("-1");//如果没有,那么就输出-1
else{
cout<<ans<<endl;
}
return 0;
}