#include<iostream> struct Key { int same;//判断字符是否在同一按键上 int rank;//通过字符排列的位置定义需要按几次 Key(int x, int y) : same(x), rank(y) { } }; //初始化26个英文字母在按键上的位置和排列次序,同一个按键same变量相同,rank表示按键次数 Key k[26] ={{1,1}, {1,2}, {1,3},{2,1},{2,2},{2,3},{3,1},{3,2},{3,3},{4,1},{4,2},{4,3}, {5,1},{5,2},{5,3},{6,1},{6,2},{6,3},{6,4},{7,1},{7,2},{7,3},{8,1},{8,2},{8,3},{8,4}}; int PrintTime(char pre, char post)//通过pre和post判断是否在同一个按键上 { if(pre == '0') return k[post-'a'].rank;//每个字符串的第一个字符单独处理 /* *这里面包含了两种情况: *一是同一个按键不同字母 *二是同一个按键相同字母 */ if(k[pre-'a'].same == k[post-'a'].same) { return 2+k[post-'a'].rank; }else{ return k[post-'a'].rank;//如果是不同按键,直接返回rank次数 } } int main() { std::string s; int sum; while(std::cin >> s) { sum = 0; sum += PrintTime('0', s[0]); char pre = s[0]; for(int i = 1;i < s.size();i++) { sum += PrintTime(pre, s[i]); pre = s[i]; } std::cout << sum << std::endl; } }