2948. Phone Number

Li Dao

这题似乎明摆着要用map
除此之外,放一个DIC字符串,方便转换字母到数字,这个技巧,也是很大的。

include

using namespace std;
int n;
string strs;
const string DIC=”22233344455566677778889999”;
map MAP;

string convert(string Ori) //Original
{
string ret=”“;
int ll=Ori.length();
for(int i=0;i>n;
for(int i=1;i<=n;i++)
{
cin>>strs;
MAP[convert(strs)]++;
}

map::iterator iter=MAP.begin();
while(iter!=MAP.end())
{
cout<<(iter).first<<’ ‘<<(iter).second<<endl;
++iter;
}
}

Saitama

这个方法是见过最简洁的了

告白于荆州

这道题的最简洁代码应该很难有能超过Python的了,其实大部分人会想到利用字典进行映射,不过对于这道题来讲其实可以有以下几个关键:
1、collections里的Counter类用于计数
2、str.maketrans函数用于建立字典映射
3、translate函数用于转换字符串
只要用上这三个,代码想不短都难

10152130230

help!!
[em:02]

13627999316
#include <bits/stdc++.h>
using namespace std;
string a = "22233344455566677778889999";
map<char,char> mp;      //字母到数字字符的映射 
map<string,int> cnt;    //记录每个标准化的号码出现的次数 

int main()
{
    int n;
    cin>>n;
    for(int i = 0; i < 26; i++) {       
        mp['A'+i] = a[i];
    }
    string s;
    while(n--) {
        cin>>s;
        string t;
        for(int i = 0; i < s.length(); i++) {
            if(!isdigit(s[i]) && s[i] != '-') t = t + mp[s[i]];
            else if(s[i] == '-') continue;
            else t = t + s[i];
        }
        t = t.insert(4,1,'-');      //插入'-' 
        cnt[t]++;
    }

    for(auto it = cnt.begin();it != cnt.end();it++) {
        cout<<it->first<<" "<<it->second<<"\n";
    }
    return 0;
}
computerLearner

nice shot!

欢迎访问我的主页!http://godweiyang.com

help!!
if(s[i][j]==’-‘)
{
for(k=j;k<a;k++) s[i][k]=s[i][k+1];
j–;
}

你当前正在回复 博客/题目
存在问题!