电话号码分身(小米2017秋招真题)

题目描述

继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替
("ZERO", "ONE", "TWO", "THREE", "FOUR", 
"FIVE", "SIX", "SEVEN", "EIGHT", "NINE"),
然后随机打乱这些字母,所生成的字符串即为电话号码对应的分身。
输入
第一行是一个整数T(1<=T<=100)表示测试样例数;接下来T行,每行给定一个分身后的电话号码的分身(长度在3到10000之间)。
输出
输出T行,分别对应输入中每行字符串对应的分身前的最小电话号码(允许前导0)。
样例输入
4
EIGHT
ZEROTWOONE
OHWETENRTEO
OHEWTIEGTHENRTEO
样例输出
0
234
345

0345

解题思路:

然后发现,0是独占Z,2独占W,4独占U,6独占X,8独占G,这些可以立马计算,出去这些之后,类似的所有的都可以枚举出来。


AC代码:

#include 
#include 
#include 
#include 
#include 
#include 
# define f(i,m,n) for(int i=m; i<=n; i++)
# define mem(s) memset(s, 0, sizeof(s));
using namespace std;
char s[10010];
int d[300];
vector v1;
vector v2;
void add(int num, int cnt) {
	f(i, 1, cnt) 
	v1.push_back(num);
}
void del(string s, int cnt) {
	for (int i = 0; i= 8) v2.push_back(v1[i] - 8);
		else v2.push_back(v1[i] + 10 - 8);
	}
	sort(v2.begin(), v2.end());
	f(i, 0, l - 1) {
		if (i != l - 1)cout << v2[i];
		else cout << v2[i] << endl;
	}
}
int main() {
	int n;
	cin >> n;
	while (n--) {
		scanf("%s", s);
		solve(s);
	}
	return 0;
}


你可能感兴趣的:(电话号码分身(小米2017秋招真题))