题解 | 手机键盘
手机键盘
https://www.nowcoder.com/practice/20082c12f1ec43b29cd27c805cd476cd
//典型的模拟问题 //思路:设置两个map,第一个map存放字母和字母的输入时间;第二个map存放字母和字母所在的按键的数字 #include <iostream> #include <stdio.h> #include <map> using namespace std; int main() { //记录每个字母输入需要花费多长的时间 map<char, int> inputTime = { {'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} }; //记录每个字母属于哪一个按键 map<char, int> keyMap = { {'a', 2}, {'b', 2}, {'c', 2}, {'d', 3}, {'e', 3}, {'f', 3}, {'g', 4}, {'h', 4}, {'i', 4}, {'j', 5}, {'k', 5}, {'l', 5}, {'m', 6}, {'n', 6}, {'o', 6}, {'p', 7}, {'q', 7}, {'r', 7}, {'s', 7}, {'t', 8}, {'u', 8}, {'v', 8}, {'w', 9}, {'x', 9}, {'y', 9}, {'z', 9} }; char str[100]; int lastKey = -1; //记录上一个输入的键 ,一开始是没有 int totalTime, i; while (scanf("%s", str) != EOF) { totalTime = 0; for (i = 0; str[i] != '\0'; ++i) { //字符数组最后一个元素后有一个终止符'\0' //判断是否要等待 if (lastKey == keyMap[str[i]]) { //如果两次输入的字符在同一个键,则有一个等待时间要加上 totalTime += 2; } totalTime += inputTime[str[i]]; lastKey = keyMap[str[i]] ; //注意词典的查找是方括号 } printf("%d\n", totalTime); } } // 64 位输出请用 printf("%lld")
王道机试指南 文章被收录于专栏
这个专栏是参考王道机试指南中相关的练习题哦