差值
時間限制: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;
}