zjut cpp1077火星数的排序问题
思路: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;
} 代码学习笔记 文章被收录于专栏
学习笔记,pat,牛客
查看3道真题和解析
