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