难点:转化时比较耗时费力,但以上方法大大减轻了工作量:!!!思路不难,就是转化和排序,
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
struct L
{
int n;
char s[30];
};
int cmp(const void *a,const void *b)
{
L* c = (L*)a;
L* d = (L*)b;
return strcmp(c->s,d->s);
}
int main ()
{
char ones[10][10]= {"","I","II","III","IV","V","VI","VII","VIII","IX"};
char tens[10][10]= {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
char huns[10][10]= {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
char thou[10][10]= {"","M","MM","MMM"};
int n;
cin>>n;
int num;
L l[10005];
while(n)
{
n--;
cin>>num;
for(int i = 0; i < num; i++)
{
cin>>l[i].n;
strcpy(l[i].s,"");
strcat(l[i].s,thou[l[i].n/1000]);
strcat(l[i].s,huns[l[i].n/100%10]);
strcat(l[i].s,tens[l[i].n/10%10]);
strcat(l[i].s,ones[l[i].n%10]);
}
qsort(l,num,sizeof(l[0]),cmp);
for(int i = 0; i < num; i++)
{
if(i)cout<<" ";
cout<<l[i].n;
}
cout<<endl;
}
return 0;
}