//不需要记录每一个字符,只需要记录每组字符的大小即可 具体看解析 #include <iostream> using namespace std; int main() { int nums[]={0,3,6,9,12,15,19,22,26};//记录每组字符的大小,从下标1开始 string s; int ret; int pos;//表示当前字符的位置 int pre;//表示前一个字符的组号 while(cin>>s) { pre=-1; ret=0; for(int i=0;i<s.length();i++) { pos=s[i]-'a'+1;//找到第一个字符的位置 for(int j=0;j<8;j++) { if(pos>nums[j]&&pos<=nums[j+1])//找到字符所在的组号 { if(pre==j)//说明与前一个字符在同一个按键上 ret+=2;//等待两个时间短 ret+=pos-nums[j]; //加上字符的相对位置 pre=j;//记录所在组号 break; } } } cout<<ret<<endl; } } // 64 位输出请用 printf("%lld")