算法设计与分析 5.3 数字排列

Posted yejifeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法设计与分析 5.3 数字排列相关的知识,希望对你有一定的参考价值。

★题目描述

给两个正整数A和B,请问通过重新排列A获得小于或等于B的最大数字是多少(不含前导0)?

★输入格式

输入的第一行两个数字A和B,保证这两个数字在int范围内。

★输出格式

输出A重新排列后小于或等于B的最大整数(不含前导0),若不存在输出-1。

★样例输入

1234 3456

★样例输出

3421

★提示

★参考代码

/*
全排列用 prev_permutation 函数实现 
*/
/*
全排列用 prev_permutation 函数实现 
string转int用  atoi 函数实现 
*/
#include<bits/stdc++.h>
using namespace std;

string A, B;

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0); 
    cin>>A>>B;
    
    sort(A.begin(), A.end(), greater<char>());
    
    string res = "";
    do{
        if(A.front()=='0') break; //不含前导0
        if(A<=B) res=max(res, A);
    }while(prev_permutation(A.begin(), A.end()));   
    
    res=="" ? cout<<"-1"<<endl : cout<<res<<endl;
    return 0;
} 

以上是关于算法设计与分析 5.3 数字排列的主要内容,如果未能解决你的问题,请参考以下文章

算法设计:全排列算法代码实现

[XJTUSE 算法设计与分析] 第五章 回溯法

南大算法设计与分析课程OJ答案

算法设计与分析 5.1 合并果子

C语言数字全排列的问题(急!!)求C代码和算法

算法设计与分析——回溯法算法模板