最大乘积和最小乘积5555

有一天,CoCo想考考Tom,于是她出了一个题目,说现在有4个数字,要组成两个2位数,问这两个两位数乘积最大是多少,最小又是多少?
输入 :第一行输入T,表示有T组测试数据,每组测试数据要求输入一行,每一行输入4个非零数a、b、c、d。
输出:每行输出最大的乘积和最小的乘积。(用空格隔开)

给四个数排个序,假设从大到小是a,b,c,d,那么最大数应该是ad*bc,最小数是da * cb
如果写代码,用穷举法就行了

#include <stdio.h>
int main()
{
    int max,min,a[4],k,f = 0;
    int i,j,m,n,p,T;
    scanf("%d",&T);
    for(p=0;p<T;p++)
    {
        for(i=0;i<4;i++)
            scanf("%d",&a[i]);
        for(i=0;i<4;i++)
        {
            for(j=0;j<4;j++)
            {
                if(i==j)
                    continue;
                for(m=0;m<4;m++)
                {
                    if(m==i || m==j)
                        continue;
                    for(n=0;n<4;n++)
                    {
                        if(n==m || n==i || n==j)
                            continue;
                        k = (a[i]*10+a[j])*(a[m]*10+a[n]);
                        if(f==0)
                        {
                            max = min = k;
                            f = 1;
                        }
                        else
                        {
                            if(max < k)
                                max = k;
                            if(min > k)
                                min = k;
                        }

                    }
                }
            }
        }
        printf("max=%d,min=%d\n",max,min);
    }
    return 0;
}

参考如下:

#include <stdio.h>
int main()
{
    int i,j,k,m,n,T;
    int a[4];
    int t,max,min;
    scanf("%d",&T);
    for (i=0;i<T;i++)
    {
        for(j=0;j<4;j++)
            scanf("%d",&a[j]);

        max = (a[0]*10+a[1])*(a[2]*10+a[3]);
        min = max;
        for (j=0;j<4;j++)
        {
            for (k=0;k<4;k++)
            {
                if(k==j) continue;
                for (m=0;m<4;m++)
                {
                    if(m==j || m==k)
                        continue;

                    //第4个数的下标
                    n=1+2+3-m-j-k;
                    t = (a[j]*10+a[k])*(a[m]*10+a[n]);
                    if(t>max) max = t;
                    if(t<min) min = t;

                }
            }
        }
        printf("%d %d\n",max,min);
    }
    return 0;
}