#include<cstdio>
#include<cstdlib>
#include<string.h>
#include<cmath>
int n,m,ans;
int a[10];
int j,i,t;
int cmp(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
}
int change(int x,int y)
{
x*=10;
return (y+x);
}
int main()
{
int first,second;
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
scanf("%d",&m);
for (t=1;t<=m;t++)
{
memset(a,0,sizeof(a));
first=0;
second=0;
scanf("%d",&n);
for (i=1;i<=n;i++)
scanf("%d",&a[i]);
qsort(a,n+1,sizeof(int),cmp);
if (n & 1==1)
{
if (a[1])
{
for (j=1;j<=(n/2+1);j++)
{first=change(first,a[j]);}
}
else
{
first=change(first,a[2]);
first=change(first,0);
for (j=3;j<=(n/2+1);j++)
{first=change(first,a[j]);}
}
for (j=n;j>=n/2+2;j--)
{second=change(second,a[j]);}
ans=first-second;
printf("%d\n",ans);
}
else
if (n==2) {printf("%d\n",a[2]-a[1]);}
else
{
int cha,num,j,dd;
cha=9;
for (j=1;j<n;j++)
{
if ((a[j+1]-a[j]<cha)&&(a[j]!=0))
{
cha=a[j+1]-a[j];
num=j;
dd=abs(n/2-j);
}
else
{
if (a[j+1]-a[j]==cha)
if (abs(n/2-j)<dd) {num=j;dd=abs(n/2-j);}
}
}
first=change(first,a[num]);
second=change(second,a[num+1]);
int temp=0;
for (j=n;j>1;j--)
{
if ((j!=num)&&(j!=num+1))
{
first=change(first,a[j]);
temp++;
}
if (temp==(n-2)/2) break;
}
temp=0;
for (j=1;j<n;j++)
{
if ((j!=num)&&(j!=num+1))
{
second=change(second,a[j]);
temp++;
}
if (temp==(n-2)/2) break;
}
ans=second-first;
printf("%d\n",ans);
}
}
return 0;
}
给定一些不同的一位数字,你可以从这些数字中选择若干个,并将它们按一定顺序排列,组成一个整数,把剩下的数字按一定顺序排列,组成另一个整数。组成的整数不能以0开头(除非这个整数只有1位)。
例如,给定6个数字,0,1,2,4,6,7,你可以用它们组成一对数10和2467,当然,还可以组成其他的很多对数,比如210和764,204和176。这些对数中两个数差的绝对值最小的是204和176,为28。
给定N个不同的0~9之间的数字,请你求出用这些数字组成的每对数中,差的绝对值最小的一对(或多对)数的绝对值是多少?
浙公网安备 33010602011771号