美文网首页
手机键盘

手机键盘

作者: JuGyang | 来源:发表于2019-01-08 00:31 被阅读0次

    题目链接
    题目描述
    按照手机键盘输入字母的方式,计算所花费的时间 如:a,b,c都在“1”键上,输入a只需要按一次,输入c需要连续按三次。 如果连续两个字符不在同一个按键上,则可直接按,如:ad需要按两下,kz需要按6下 如果连续两字符在同一个按键上,则两个按键之间需要等一段时间,如ac,在按了a之后,需要等一会儿才能按c。 现在假设每按一次需要花费一个时间段,等待时间需要花费两个时间段。 现在给出一串字符,需要计算出它所需要花费的时间。

    输入描述
    一个长度不大于100的字符串,其中只有手机按键上有的小写字母

    输出描述
    输入可能包括多组数据,对于每组数据,输出按出Input所给字符串所需要的时间

    示例1

    输入
    bob
    www
    
    输出
    7
    7
    

    代码实现

    #include <stdio.h>
    #include <string.h>
    
    char buf[26][2] = {
        {'a', 1},
        {'b', 2},
        {'c', 3},
        {'d', 1},
        {'e', 2},
        {'f', 3},
        {'g', 1},
        {'h', 2},
        {'i', 3},
        {'j', 1},
        {'k', 2},
        {'l', 3},
        {'m', 1},
        {'n', 2},
        {'o', 3},
        {'p', 1},
        {'q', 2},
        {'r', 3},
        {'s', 4},
        {'t', 1},
        {'u', 2},
        {'v', 3},
        {'w', 1},
        {'x', 2},
        {'y', 3},
        {'z', 4},
    };
    
    int main(void) {
        char str[100] = { 0 };
        int cnt = 0;
        int tmp_1 = 0;
        int tmp_2 = 0;
        int j = 0;
        while (scanf("%s", str) != EOF) {
            cnt = 0;
            int n = strlen(str);
            for (int i = 0; i < n; i++) {
                if (str[i + 1]) {
                    j = 0;
                    while (str[i] - buf[j][0]) {
                        j++;
                    }
                    cnt += buf[j][1];
                    tmp_1 = buf[j][1];
                    if ((buf[j][0] >= 'p' && buf[j][0] <= 's') || (buf[j][0] >= 'w' && buf[j][0] <= 'z')) {
                        tmp_2 = 4 - tmp_1;
                        if (str[i + 1] >= buf[j - tmp_1 + 1][0] && str[i + 1] <= buf[j + tmp_2][0]) {
                            cnt += 2;
                        }
                    } else {
                        tmp_2 = 3 - tmp_1;
                        if (str[i + 1] >= buf[j - tmp_1 + 1][0] && str[i + 1] <= buf[j + tmp_2][0]) {
                            cnt += 2;
                        }
                    }
                } else {
                    j = 0;
                    while (str[i] - buf[j][0]) {
                        j++;
                    }
                    cnt += buf[j][1];
                }
            }
            printf("%d\n", cnt);
        }
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:手机键盘

          本文链接:https://www.haomeiwen.com/subject/hfpmrqtx.html