HNU 实训 2-13 487-3279

每个人都喜欢有令人难忘的电话号码。要想让电话号码变得令人难忘的一种方法是拼出一个令人难忘的单词或短语。例如,你可以拨打滑铁卢大学的电话,拨打令人难忘的电话号码TUT-GLOP。

       有时只有一部分号码被用来拼写一个单词,例如,你可以拨打310-gino从Gino's订购披萨。

       要使电话号码令人难忘的另一种方法是以一种令人难忘的方式对数字进行分组。你可以从比萨饼小屋中订购比萨饼,方法是拨打他们的“3个10”,即号码3-10-10-10。

       电话号码的标准格式是七位的十进制数字,第三和第四位之间包含连字符(例如888-1200)。电话的键盘提供字母到数字的映射,如下所示:

       A, B, C映射到2

       D, E, F映射到3

       G, H, I映射到4

       J, K, L映射到5

       M, N, O映射到6

       P, R, S映射到7

       T, U, V映射到8

       W, X, Y映射到9

       Q和Z没有映射。连接符不拨号,必要时可加上或去除。TUT-GLOP的标准格式是888-4567,310-GINO的标准格式是310-4466,3-10-10-10的标准格式是310-1010。

       当两个电话号码有相同的标准格式时是等价的(拨同样的号码)。

       你的公司正在编制本地企业的电话号码目录,作为质量控制的一部分,你需要检查没有两个(或多个)企业具有相同的电话号码。


【输入形式】

输入包括一个案例。输入的第一行为一个正整数,指定目录中电话号码的数目(最多100,000)。其余的各行列出目录中的电话号码,每个号码单独占一行。每个电话号码都是一个由十进制数字、大写字母(不包括Q和z)和连字符组成的字符串。字符串中的七个字符或是数字或是字母。

【输出形式】

对于出现超过一次的每个号码,按照标准格式及字典序每个输出一行,然后是空格,接着输出出现的次数。只出现1次的电话号码不输出。

【样例输入】

12
4873279
ITS-EASY
888-4567
3-10-10-10
888-GLOP
TUT-GLOP
967-11-11
310-GINO
F101010
888-1200
-4-8-7-3-2-7-9-
487-3279

【样例输出】

310-1010 2
487-3279 4
888-4567 3

思路:简单转换,就是麻烦(一直觉得字符串的题都特麻烦)

完整代码:

#include <bits/stdc++.h>

using namespace std;

struct callnumber
{
    string num;
    int times=0;
};

bool cmp(callnumber &a,callnumber &b)
{
    return a.num<b.num;
}

char trans(char &m)
{
    if(m=='A'||m=='B'||m=='C') return '2';
    else if(m=='D'||m=='E'||m=='F') return '3';
    else if(m=='G'||m=='H'||m=='I') return '4';
    else if(m=='J'||m=='K'||m=='L') return '5';
    else if(m=='M'||m=='N'||m=='O') return '6';
    else if(m=='P'||m=='R'||m=='S') return '7';
    else if(m=='T'||m=='U'||m=='V') return '8';
    else if(m=='W'||m=='X'||m=='Y') return '9';
}

int main()
{
    int n=0;
    cin >> n;
    vector<callnumber> all;
    while(n--)
    {
        string tmp="",tmp1="";
        cin >> tmp;
        for (int i=0; i<tmp.size(); i++)
            if (tmp[i]!='-') tmp1+=tmp[i];
        for (int i=0; i<tmp1.size(); i++)
            if (!(tmp1[i]>='0'&&tmp1[i]<='9')) tmp1[i]=trans(tmp1[i]);
        tmp1.insert(3,"-");
        int flag=0;
        for (size_t j=0; j<all.size(); j++)
        {
            if (all[j].num==tmp1)
            {
                all[j].times++;
                flag=1;
                break;
            }
        }
        if (!flag)
        {
            callnumber x;
            x.num=tmp1;
            x.times=1;
            all.push_back(x);
        }
    }
    sort(all.begin(),all.end(),cmp);
    for (size_t j=0; j<all.size(); j++)
        if (all[j].times>1) cout << all[j].num << " " << all[j].times << endl;
    return 0;
}

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段引用是一段C++代码,实现了两个多项式的加法。代码首先定义了一个cmp函数,用于比较两个数对的第一个数(多项式的次数)的大小。然后通过vector容器分别存储了两组数对。接下来使用迭代器遍历第一个vector容器中的数对,并在第二个vector容器中查找相同次数的数对,若找到则将第一个数对的系数修改为第二个数对的系数,并从第二个vector容器中删除这个数对。最后,将第二个vector容器中剩余的数对添加到第一个vector容器中,并按照多项式次数的降序对其进行排序。最后,遍历第一个vector容器,按照指定格式输出结果数对。这段代码实现了多项式加法,并按降幂输出结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [实训三#3.12多项式加法](https://blog.csdn.net/qq_54256430/article/details/120049796)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [HNU软件能力实训3-12. 多项式加法](https://blog.csdn.net/Karltan/article/details/118714616)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值