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,牛客

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务