由打乱字母,找出最小电话号码

该博客介绍了MIUI9的一个特色功能——电话号码分身,其中涉及将数字转化为字母并打乱的过程。博主提供了解题思路,包括如何通过独特的字母字符来解码电话号码,并给出了相应的解码算法。示例和代码帮助理解如何从打乱的字母恢复成最小的原始电话号码。
摘要由CSDN通过智能技术生成

题目描述

继MIUI8推出手机分身功能之后,MIUI9计划推出一个电话号码分身的功能:首先将电话号码中的每个数字加上8取个位,然后使用对应的大写字母代替 (”ZERO”, “ONE”, “TWO”, “THREE”, “FOUR”, “FIVE”, “SIX”, “SEVEN”, “EIGHT”, “NINE”), 然后随机打乱这些字母,所生成的字符串即为电话号码对应的分身。

输入描述:

第一行是一个整数T(1 ≤ T ≤ 100)表示测试样例数;接下来T行,每行给定一个分身后的电话号码的分身(长度在3到10000之间)。

输出描述:

输出T行,分别对应输入中每行字符串对应的分身前的最小电话号码(允许前导0)。

示例1
输入

4
EIGHT
ZEROTWOONE
OHWETENRTEO
OHEWTIEGTHENRTEO

输出

0
234
345
0345

解题思路:

要先依次解码具有独一无二字符的数字,具有这样特点的数字有五个分别是FOUR(U),SIX(X),TWO(W),EIGHT(G),ZERO(Z),可以根据独特字符的个数直接判断有多少个相应的数字,解码完成这五个数字之后另外的数字也会由于这些数字的移除而具有了独一无二的字符,这样的数字有
THREE(H) - sum(8-EIGHT)
FIVE(F) -sum(4-FOUR)
SEVEN(S) -sum(6-SIX)

最后
ONE(O) - sum(0-ZERO) - sum(2-TWO) -sum(4-FOUR)
NINE(I) -sum(5-FIVE) - sum(6-SIX) -sum(8-EIGHT)
需要注意的是原始数字和最终出现的数字还有一个转换的过程(加8取个位数)

代码:

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    int n;
    string s;
    cin >> n;
    while(n--)
    {
        s.clear();
        cin >> s;
        int b[10] = {
  0};
        for(int i=0; i<s.size(); i++)
        {
            if(s[i] &#
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值