代码填空:组合数字(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;
}
目录
相关文章
|
1月前
填空练习
【10月更文挑战第2天】填空练习。
11 2
|
算法 Java
2015 蓝桥杯省赛部分题整理(九数组分数,牌型种数,串逐位和,循环节长度,打印菱形)
2015 蓝桥杯省赛部分题整理(九数组分数,牌型种数,串逐位和,循环节长度,打印菱形)
92 0
|
6月前
leetcode-1414:和为 K 的最少斐波那契数字数目
leetcode-1414:和为 K 的最少斐波那契数字数目
43 0
|
存储 算法 容器
精选算法题(1)——枚举符合要求的算术表达式(DFS、回溯法)
精选算法题(1)——枚举符合要求的算术表达式(DFS、回溯法)
|
存储 机器学习/深度学习
母牛的故事 替换空格 二进制中1的个数 不使用第三个变量交换a,b的值
母牛的故事 替换空格 二进制中1的个数 不使用第三个变量交换a,b的值
87 0
【C语言】(错题整理) 寻找完数、字符串中各类字符数的统计、最大公约数和最小公倍数、回文数计算 (循环、函数相关内容)
本篇博客旨在整理最近在头歌遇到的难题、错题,对其进行分析并整理。 一、循环 1.寻找完数(计算因子例题) 一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出1000之内的所有完数。 这道题的首要任务就是找到各个数的因子,然后再对其进行判断。那么计算这个数的因子,我们可以用循环,试每个小于它的数对其进行求余%,结果为零即是因子。