NYOJ 1233 差值
差值
- 描述
输入一个整数数组,将它们连接起来排成一个数,找出能排出的所有数字中最大,最小的两个,输出两个数的差值。例如输入数组{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("\n");*/ 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("\n"); 69 } 70 return 0; 71 }