1079.手机键盘

题目描述:
按照手机键盘输入字母的方式,计算所花费的时间

如:a,b,c都在“1”键上,输入a只需要按一次,输入c需要连续按三次。

如果连续两个字符不在同一个按键上,则可直接按,如:ad需要按两下,kz需要按6下

如果连续两字符在同一个按键上,则两个按键之间需要等一段时间,如ac,在按了a之后,需要等一会儿才能按c。

现在假设每按一次需要花费一个时间段,等待时间需要花费两个时间段。

现在给出一串字符,需要计算出它所需要花费的时间。
输入:
一个长度不大于100的字符串,其中只有手机按键上有的小写字母
输出:
输入可能包括多组数据,对于每组数据,输出按出Input所给字符串所需要的时间
样例输入:

bob
www
样例输出:

 7
7

#include<cstring>
#include<iostream>
#include<map>
using namespace std;

int main(){
    string s;
    while(getline(cin,s)){
        int num=0;
        for(int i=0;i<s.size();i++){
            if(s[i]=='a' || s[i]=='d' || s[i]=='g' || s[i]=='j' || s[i]=='m' || s[i]=='p' || s[i]=='t' || s[i]=='w') num++;
            else {
            if(s[i]=='b' || s[i]=='e' || s[i]=='h' || s[i]=='k' || s[i]=='n' || s[i]=='q' || s[i]=='u' || s[i]=='x')
                 num+=2;
                 else {
                     if(s[i]=='c' || s[i]=='f' || s[i]=='i' || s[i]=='l' || s[i]=='o' || s[i]=='r' || s[i]=='v' || s[i]=='y')
                     num+=3;
                     else num+=4;
                 }
        }
        }
        map<char,int> m;
        m['a']=1;
        m['b']=1;
        m['c']=1;
        m['d']=2;
        m['e']=2;
        m['f']=2;
        m['g']=3;
        m['h']=3;
        m['i']=3;
        m['j']=4;
        m['k']=4;
        m['l']=4;
        m['m']=5;
        m['n']=5;
        m['o']=5;
        m['p']=6;
        m['q']=6;
        m['r']=6;
        m['s']=6;
        m['t']=7;
        m['u']=7;
        m['v']=7;
        m['w']=8;
        m['x']=8;
        m['y']=8;
        m['z']=8;
        for(int i=0;i<s.size()-1;i++){
            if(m[s[i+1]]==m[s[i]]) num+=2;
        }
        cout<<num<<endl;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/bernieloveslife/p/9736451.html