题解 | #手机键盘#

手机键盘

https://www.nowcoder.com/practice/20082c12f1ec43b29cd27c805cd476cd

#include <bits/stdc++.h>
using namespace std;
map<char, int> m;
map<int, char> v;
int main() {
    m.insert(make_pair('a', 1));
    m.insert(make_pair('b', 1));
    m.insert(make_pair('c', 1));
    m.insert(make_pair('d', 2));
    m.insert(make_pair('e', 2));
    m.insert(make_pair('f', 2));
    m.insert(make_pair('g', 3));
    m.insert(make_pair('h', 3));
    m.insert(make_pair('i', 3));
    m.insert(make_pair('j', 4));
    m.insert(make_pair('k', 4));
    m.insert(make_pair('l', 4));
    m.insert(make_pair('m', 5));
    m.insert(make_pair('n', 5));
    m.insert(make_pair('o', 5));
    m.insert(make_pair('p', 6));
    m.insert(make_pair('q', 6));
    m.insert(make_pair('r', 6));
    m.insert(make_pair('s', 6));
    m.insert(make_pair('t', 7));
    m.insert(make_pair('u', 7));
    m.insert(make_pair('v', 7));
    m.insert(make_pair('w', 8));
    m.insert(make_pair('x', 8));
    m.insert(make_pair('y', 8));
    m.insert(make_pair('z', 8));
    v.insert(make_pair(1, 'a'));
    v.insert(make_pair(2, 'd'));
    v.insert(make_pair(3, 'g'));
    v.insert(make_pair(4, 'j'));
    v.insert(make_pair(5, 'm'));
    v.insert(make_pair(6, 'p'));
    v.insert(make_pair(7, 't'));
    v.insert(make_pair(8, 'w'));
    string s;
    while (cin >> s) {
        int wait = 0; //等待时间
        for (int i = 0; i < s.length(); i++ ) {
            //如果连续按键是一样的,等待时间加2
            if (i > 0 && m[s[i - 1]] == m[s[i]]) {
                wait += 2;
            }
            //num 是该字母和所在按键第一个字母的距离
            //第一个字母按一下,第num个字母按num+1下
            int num = s[i] - v[m[s[i]]];
            wait = wait + num + 1;
        }
        cout << wait << endl;
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

点赞 评论 收藏
分享
06-20 19:40
中原工学院 Java
网络存储:十几天不会让你拉人办卡就结束了吧?
点赞 评论 收藏
分享
墨西哥大灰狼:如果你的校友卤馆还在的话,他肯定会给你建议的,可是卤馆注销了@ 程序员卤馆
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务