清华大学机试 手机键盘
基本思想:
提前打表,直接算;
关键点:
无;
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<cmath>
#include<set>
#include<map>
using namespace std;
vector<string>keys = { "abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };
map<char, int>mp;
void init() {
for (int i = 0; i < keys.size(); i++) {
for (int j = 0; j < keys[i].size(); j++) {
mp.insert(make_pair(keys[i][j], i));
}
}
}
int charge(char c) {
int index = mp[c];
return c - keys[index][0] + 1;
}
int main() {
string s;
init();
while (cin >> s) {
if (s == "") {
cout << 0 << endl;
continue;
}
int cnt = 0;
cnt += charge(s[0]);
for (int i = 1; i < s.size(); i++) {
//计算后续的按键;
if (mp[s[i]] == mp[s[i - 1]]) {
//如果在相同按键上;
cnt += 2;
}
cnt += charge(s[i]);
}
cout << cnt << endl;
}
return 0;
}

浙公网安备 33010602011771号