清华大学机试 手机键盘

基本思想:

提前打表,直接算;

关键点:

无;

#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;
}

  

猜你喜欢

转载自www.cnblogs.com/songlinxuan/p/12386582.html