给定一个数n,如:23121,给定一组数字a如[2,4,9],求由a中元素组成的小于n的最大数。

#include<string>
#include<vector>
#include<iostream>
#include <algorithm>

using namespace std;

int ans;
int value = 14132;
string valueStr = to_string(value);
vector<int> nums = {1,4,9};

bool dfs(int index, bool judge, int temp) {

    if(index == valueStr.size()) {
        ans = temp;
        return true;
    }
    if(judge) {
        return dfs(index + 1, true, temp * 10 + (nums[nums.size() - 1]));     
    } else {
        int val = valueStr[index] - '0';
        for(int i = nums.size() - 1; i >= 0; --i) {
            if(val == nums[i]) {
                if(dfs(index + 1, false, temp * 10 + nums[i])) {
                    return true;
                }
            } else if (val > nums[i]) {
                if(dfs(index + 1, true, temp * 10 + nums[i])) {
                    return true;
                }
            } 
        }
        //最终结果为空
        if(index != 0) {
            return false;
        }
        //少了一位,显然小了
        return dfs(index + 1, true, temp); 
    }
}

int main()
{

    dfs(0, false, 0);
    cout << ans << endl; 
    return 0;
}

 

posted on 2022-04-29 17:11  silenccfly  阅读(958)  评论(0编辑  收藏  举报

导航