有一天,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;
}