代码填空:组合数字(DFS)

简介: 右侧代码是将 6 个整数按照任意顺序组合到一起, 计算能组合出的最大数字。 例如:4123,25,66 组合到一起就是 66412325。

右侧代码是将 6 个整数按照任意顺序组合到一起,
计算能组合出的最大数字。
例如:4123,25,66 组合到一起就是 66412325。
请阅读程序补全代码,实现这个功能。

分析:
dfs 不可k++

#include <stdio.h>
long long max(long long x, long long y) {
    return x > y ? x : y;
}
long long test(int a[], int n) {    //把数组合上去 
    long long ret = 0;
    for (int i = 0; i < n; ++i) {
        int tp = a[i];
        int j = 1;
        while(tp) {
            j *= 10;
            tp /= 10;
        }
        ret = ret * j + a[i];
    }
    return ret;
}

long long f(int a[], int k) {
    if (k == 6) {
        return test(a, k);
    }
    long long ret = 0;
    for(int i = k; i < 6; ++i) {
        int t = a[k];
        a[k] = a[i];
        a[i] = t;
        ret = max(ret, f(a,k+1)/*在这里填写必要的代码*/);
        t = a[k];
        a[k] = a[i];
        a[i] = t;
    }
    return ret;
}

int main() {
    int a[6] = {517, 283, 429, 65, 6566, 32};
    printf("%lld\n", f(a, 0));
    return 0;
}
目录
相关文章
|
3月前
lanqiao OJ 239 最优包含
lanqiao OJ 239 最优包含
21 2
|
8月前
|
机器学习/深度学习 算法 测试技术
【组合数学 容斥原理 逆向思考】2930. 重新排列后包含指定子字符串的字符串数目
【组合数学 容斥原理 逆向思考】2930. 重新排列后包含指定子字符串的字符串数目
|
8月前
|
C语言
c语言编程练习题:7-51 求奇数分之一序列前N项和
c语言编程练习题:7-51 求奇数分之一序列前N项和
79 0
|
7月前
|
移动开发 C++
【洛谷 P1157】组合的输出 题解(深度优先搜索+枚举子集)
该问题要求编程输出从1到n中选择r个元素的所有组合,组合按字典序排列。输入包含两自然数n和r(1&lt;n&lt;21, 0≤r≤n)。输出每个组合时,每个数字占据3个字符宽度。提供的AC代码使用C++,通过递归搜索方法枚举子集。样例输入为5 3,输出显示所有3个元素的组合。
59 0
|
7月前
|
算法
算法特训,AB5 .点击消除BC.149简写单词牛客.除2!牛客.Fibonacci数列
算法特训,AB5 .点击消除BC.149简写单词牛客.除2!牛客.Fibonacci数列
|
算法 Java
2015 蓝桥杯省赛部分题整理(九数组分数,牌型种数,串逐位和,循环节长度,打印菱形)
2015 蓝桥杯省赛部分题整理(九数组分数,牌型种数,串逐位和,循环节长度,打印菱形)
103 0
|
8月前
leetcode-1414:和为 K 的最少斐波那契数字数目
leetcode-1414:和为 K 的最少斐波那契数字数目
50 0
|
存储 算法 容器
精选算法题(1)——枚举符合要求的算术表达式(DFS、回溯法)
精选算法题(1)——枚举符合要求的算术表达式(DFS、回溯法)
|
存储 C++
【力扣·每日一题】689. 三个无重叠子数组的最大和 (C++ 前缀和优化dp 保存路径)
【力扣·每日一题】689. 三个无重叠子数组的最大和 (C++ 前缀和优化dp 保存路径)
115 0
【力扣·每日一题】689. 三个无重叠子数组的最大和 (C++ 前缀和优化dp 保存路径)