思路:hash表的思路方法 把地球数字和火星数字上下排列
{0,1,2,3,4,5,6,7,8,9}地球
{0,8,1,5,2,3,9,4,7,6}火星
看出hash映射数组
火星数字代表数组下标
int a[10]={0,2,4,5,7,3,9,8,1,6}
//火星数排序 #include<iostream> #include<algorithm> #include<vector> using namespace std; int r[10] = { 0,2,4,5,7,3,9,8,1,6 }; int tranf(int x)//火星数字转地球数字函数 { int ans = 0, t = 1; if (x == 0) return 0; else { while (x) { ans += t * r[x % 10]; t *= 10; x /= 10; } return ans; } } bool cmp(int a, int b) { return tranf(a) < tranf(b);//按照地球文排序 } int main() { int n; while (cin >> n) { while (n--) { int m; cin >> m; vector<int>a; int x; for (int i = 0; i < m; i++) { cin >> x; a.push_back(x); } sort(a.begin(), a.end(), cmp); for (int i = 0; i < m; i++) { if (i != 0) cout << ' ' << a[i]; else cout << a[i]; } cout << endl; } } return 0; }