【A
题意:
一个圆环由字母表组成首尾相接的环,环上有一个指针,最初指向字母a。每次可以顺时针或者逆时针旋转一格。例如,a顺时针旋转到z,逆时针旋转到b。求一个字符串至少要转多少次。
样例输入:
zeus
样例输出:
18
思路:
求解对于一个字母x到另一个字母y是正转还是反转所需转的次数少是本问题的核心。正转和反转的算法与x和y的大小有关,正转的时候直接大的减小的,反转的时候算二者和‘a’的距离之和,然后进行比较。
代码:
#include<iostream>
#include<string>
using namespace std;
int main()
{string str;cin >> str;int len = str.length();char ch = 'a';int sum = 0;for (int i = 0; i < len; i++){int num1 = 0;int num2 = 0;if (str.at(i) > ch){num1 = str.at(i) - ch;//正转num2 = ch - 'a' + 'z' + 1 - str.at(i);//反转}else if (str.at(i) < ch){num1 = 'z' + 1 - ch + str.at(i) - 'a';//正转num2 = ch - str.at(i);//反转}int num = (num1 < num2) ? num1 : num2;sum += num;ch = str.at(i);}cout << sum;return 0;
}