差值
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
输入一个整数数组,将它们连接起来排成一个数,找出能排出的所有数字中最大,最小的两个,输出两个数的差值。例如输入数组{1, 2},则输出9。
-
输入
- 第一行输入一个整数T,表示有T组测试数据。每组测试数据的第一行输入一个整数n(0<n<=1000),第二行输入n个整数ai(0<=ai<2^32)。 输出
- 输出最大数最小数的差值,每个输出各占一行。 样例输入
-
1 3 1 2 3
样例输出
-
198
思路:在排序时将两个字符串前后组合-->s1s2 , s2s1 比较大小 见代码
code:
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include<string.h>
#include <iostream>
#define maxx 10
using namespace std;
int a[100000],b[100000],c[100000];
char * str_1 = new char[maxx*2 + 1];
char * str_2 = new char[maxx*2 + 1];
int compare(const void * str1, const void * str2)//排序函数
{
strcpy(str_1, *(const char **)str1);
strcat(str_1, *(const char **)str2);
strcpy(str_2, *(const char **)str2);
strcat(str_2, *(const char **)str1);
return strcmp(str_1, str_2);
}
int compare1(const void * str1, const void * str2)//排序函数
{
strcpy(str_1, *(const char **)str1);
strcat(str_1, *(const char **)str2);
strcpy(str_2, *(const char **)str2);
strcat(str_2, *(const char **)str1);
return strcmp(str_1, str_2)==-1;
}
string strsub(string str1,string str2)//大数减法
{
int i,len1,len2,j;
string s2="";
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
len1=str1.size();
len2=str2.size();
j=0;
for(int i=len1-1;i>=0;i--)
a[j++]=str1[i]-'0';
j=0;
for(i=len2-1;i>=0;i--)
b[j++]=str2[i]-'0';
for(i=0;i<len1;i++){
c[i]+=(a[i]-b[i]);
if(c[i]<0){
c[i+1]--;
c[i]+=10;
}
}
i=len1-1;
while(!c[i])
{
i--;
if(i==-1) break;
}
if(i==-1)
{
s2="0";
return s2;
}
while(i>=0)
s2+=(c[i--]+'0');
return s2;
}
int sort_t(int * arr, int len)
{
if(arr == NULL || len < 1)
return -1;
char ** str_x = (char **)(new int[len]);
for(int i = 0; i < len; ++i)
{
str_x[i] = new char[maxx + 1];
sprintf(str_x[i], "%d", arr[i]);
}
qsort(str_x, len, sizeof(char *), compare);//从小到大
string s1="";
for(int i = 0; i < len; ++i)
s1+=str_x[i];
qsort(str_x, len, sizeof(char *), compare1);//从大到小
string s2="";
for(int i = 0; i < len; ++i)
s2+=str_x[i];
cout<<strsub(s2,s1)<<endl;
for(int i = 0; i < len; ++i)
delete []str_x[i];
delete []str_x;
}
int main()
{
int n,arr[10000],cas;
scanf("%d",&cas);
while(cas--)
{
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%d",&arr[i]);
sort_t(arr, n);
}
return 0;
}