手机键盘

题目链接
题目描述
按照手机键盘输入字母的方式,计算所花费的时间 如: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;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述 按照手机键盘输入字母的方式,计算所花费的时间 如:a,b,c都在“1”键上,输入a只需要按一次,输入c需...
    IceFrozen阅读 284评论 0 0
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,507评论 0 5
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,072评论 0 13
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,875评论 0 10
  • Emacs tutorial. See end for copying conditions. Emacs教程。...
    李2牛阅读 1,664评论 0 4