admin管理员组文章数量:1794759
【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;
}
本文标签: A
版权声明:本文标题:【A 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1696192460a320195.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论