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

问题:用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];

        }

    }

}

猜你喜欢

转载自www.cnblogs.com/3yangyue3/p/9178421.html