C语言版数据结构及算法题_1

本文介绍了一个使用递归算法寻找由数字2、3、4、5、6组成的两位数和三位数的最大乘积的方法。通过随机排列组合这些数字并计算所有可能组合的乘积来找出最大的乘积。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:用2、3、4、5、6这五个数字组成一个两位数和一个三位数,要使乘积最大。

#include <stdio.h>

/**

 a[]:数据数组

 b[]:随机排序得到的其中一组结果的数据数组

 n:数据数组的长度

 j:当前从a[]中抽取的一个数

 *max:获取随机排序的到的两个数乘积的最大值

 s:前s个数(前s个数乘以后n-s个数)

 **/

void huoqu(int a[],int b[],int n,int j,int *max,int s);

 

int main(int argc, const char * argv[]) {

    int max=0;

    int a[]={2,3,4,5,6};

    int b[5];

    

    huoqu(a, b, 5,0,&max,3);

    printf("MAX:%d",max);

    return 0;

}

void huoqu(int a[],int b[],int n,int j,int *max ,int s){

    if (j>(n-1)) {

        int v1=0,v2=0;

        for (int i=0; i<n; i++) {

            if (i<s) {

                v1=v1*10+b[i];

            }else{

                v2=v2*10+b[i];

            }

        }

        int value=v2*v1;

//        printf("%dX%d=%d\n",v1,v2,value);

        if (*max<value) {

            *max=value;

        }

    }

    for (int i=0; i<n; i++) {

        if (a[i]>0) {

            b[j]=a[i];

            a[i]=0;

            huoqu(a, b, n,j+1,max,s);

            a[i]=b[j];

        }

    }

}

转载于:https://www.cnblogs.com/3yangyue3/p/9178421.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值