题目内容
咕咕东是个贪玩的孩子,有一天,他从上古遗迹中得到了一个神奇的圆环。这个圆环由字母表组成首尾相接的环,环上有一个指针,最初指向字母a。咕咕东每次可以顺时针或者逆时针旋转一格。例如,a顺时针旋转到z,逆时针旋转到b。咕咕东手里有一个字符串,但是他太笨了,所以他来请求你的帮助,问最少需要转多少次。
输入格式
输入只有一行,是一个字符串。
输出格式
输出最少要转的次数。
输入示例
zeus
输出示例
18
解题思路
这道题的思路其实可以很多,而且不难。
本人选择直接预处理每个字母到其他字母的距离,组合成一个二阶数组,要用的时候提取出来就好了。
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
string input;
//A B C D E F G
//H I J K L M N=13[12]
//O P Q R S T
//U V W X Y Z
int dis[26][26];
int CtoI(char letter)
{
int out;
if(letter>='A'&&letter<='Z')
{
out=letter-'A';
return out;
}
if(letter>='a'&&letter<='z')
{
out=letter-'a';
return out;
}
}
int main()
{
memset(dis,0,sizeof(dis));
int t;
for(int l=0;l<=25;l++)
{
t=0;
for(int i=l;i<=25;i++)
{
dis[l][i]=t;
dis[i][l]=t;
if(i<13+l)
{
t++;
}
else
{
t--;
}
}
}
cin>>input;
int ans=0;
int last=0;
int now=0;
for(int i=0;i<input.length();i++)
{
now=CtoI(input[i]);
ans+=dis[last][now];
last=now;
}
cout<<ans;
return 0;
}