题目链接
题目描述
按照手机键盘输入字母的方式,计算所花费的时间 如: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;
}
网友评论