- 描述
输入一个整数数组,将它们连接起来排成一个数,找出能排出的所有数字中最大,最小的两个,输出两个数的差值。例如输入数组{1, 2},则输出9。
- 输入
- 第一行输入一个整数T,表示有T组测试数据。每组测试数据的第一行输入一个整数n(0<n<=1000),第二行输入n个整数ai(0<=ai<2^32)。
- 输出
- 输出最大数最小数的差值,每个输出各占一行。
- 样例输入
-
1
3
1 2 3
- 样例输出
-
198
1 #include<cstdio>
2 #include<cstring>
3 #include<algorithm>
4 using namespace std;
5
6 struct str
7 {
8 char s[20];
9 }sub[1005];
10
11 bool cmp(str a,str b)
12 {
13 int i;
14 int len1=strlen(a.s);
15 int len2=strlen(b.s);
16 int x=max(len1,len2);
17 for(i=0;i<x;i++)
18 {
19 if(a.s[i%len1]<b.s[i%len2])
20 return 1;
21 else if(a.s[i%len1]>b.s[i%len2])
22 return 0;
23 }
24 return 1;
25 }
26
27 int main()
28 {
29 int t,len,i,j,n;
30 char s[20050];
31 int a1[20050],a2[20050];
32 scanf("%d",&t);
33 while(t--)
34 {
35 scanf("%d",&n);
36 for(i=0;i<n;i++)
37 scanf("%s",sub[i].s);
38 sort(sub,sub+n,cmp);
39 /*for(i=0;i<n;i++)
40 printf("%s ",sub[i].s);
41 printf("
");*/
42 memset(s,0,sizeof(s));
43 for(i=0;i<n;i++)
44 strcat(s,sub[i].s);
45 len=strlen(s);
46 for(j=0,i=0;i<len;i++)
47 a1[j++]=s[i]-'0';
48 memset(s,0,sizeof(s));
49 for(i=n-1;i>=0;i--)
50 strcat(s,sub[i].s);
51 for(j=0,i=0;i<len;i++)
52 a2[j++]=s[i]-'0';
53 for(i=len-1;i>=0;i--)
54 {
55 a2[i]=a2[i]-a1[i];
56 if(a2[i]<0)
57 {
58 a2[i]+=10;
59 a2[i-1]-=1;
60 }
61 }
62 for(i=0;i<len;i++)
63 if(a2[i])break;
64 if(i==len)
65 printf("0");
66 for(;i<len;i++)
67 printf("%d",a2[i]);
68 printf("
");
69 }
70 return 0;
71 }