题目描述:
有一个圆环,由字母表中字母首尾相接组成。环上有一个指针,最初指向a。每次可顺时针或逆时针旋转一格。例如:a顺时针转到b,逆时针转到z。现在有一个字符串,求需要转多少次可使指针依次指向字符串中的字母。
输入格式:
输入只有一行,是一个字符串。
Sample Input:
zeus
输出格式:
输出最少要转的次数。
Sample Output:
18
思路:
将此字符串看作一个环,分别判断从当前位置到目标所在位置是从前走靠近还是从后走靠近,判断标准为其走的距离是否小于字符串一半的长度,挑选较小的那个加入总和即可。
代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
char huan[24];
int now = 0,sum = 0;
for (int i = 0; i < 26; i++)
huan[i] = 'a' + i;
string a;
cin >> a;
for (int i = 0; i < a.size(); i++)
{
int to = a[i] - 'a';
int move = to - now;
if (move > 13)
sum += 26 - move;
if (move < -13)
sum += 26 + move;
if (move >= 0 && move <= 13)
sum += move;
if (move <= 0 && move >= -13)
sum -= move;
now=to;
}
cout << sum << endl;
return 0;
}