暴力。可以用数组记录每个键上第一个字母,减少代码量。
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <string.h>
#include <string>
#include <map>
#include <cstdio>
#include <cmath>
using namespace std;
int gettime(char c)
{
if(c-'a'<15)
{
switch((c-'a')%3)
{
case 0:return 1;
case 1:return 2;
case 2:return 3;
}
}
else
{
switch(c-'a')
{
case 15:return 1;
case 19:return 1;
case 22:return 1;
case 16:return 2;
case 20:return 2;
case 23:return 2;
case 17:return 3;
case 21:return 3;
case 24:return 3;
case 18:return 4;
case 25:return 4;
}
}
}
int getkey(char ch)
{
if(ch>='a'&&ch<='c') return 0;
if(ch>='d'&&ch<='f') return 1;
if(ch>='g'&&ch<='i') return 2;
if(ch>='j'&&ch<='l') return 3;
if(ch>='m'&&ch<='o') return 4;
if(ch>='p'&&ch<='s') return 5;
if(ch>='t'&&ch<='v') return 6;
if(ch>='w'&&ch<='z') return 7;
}
int main()
{
char str[105];
while(cin>>str)
{
int len=strlen(str);
int time=gettime(str[0]);
for(int i=1;i<len;i++)
{
if(getkey(str[i-1])==getkey(str[i]))
time += 2;
time += gettime(str[i]);
}
cout<<time<<endl;
}
return 0;
}