题意:
一个圆环包含26个英文字母,顺时针从a到z排列,有一个指针指向a,每次可以顺时针或逆时针旋转一格。如a顺时针旋转到z,逆时针旋转到b。现在有一个字符串(长度<=10000),请输出要得到这个字符串最少需要旋转的次数。
思路:
每次要旋转时,计算前一个字符到后一个字符需要旋转多少次。若字符a>=字符b,则两者旋转次数为a-b与26-(a-b)中较小的那一个。
Code
1 #include<iostream>
2 #include<string>
3 using namespace std;
4
5 int main(){
6 string str;
7 int sum=0;
8 cin>>str;
9 sum=str[0]-'a';
10
11 if(sum>13)
12 sum=26-sum;
13 for(int i=0;i<str.length()-1;i++){
14 int nums=str[i]-str[i+1];
15 if(nums<0)
16 nums=-nums;
17 if(nums>12)
18 nums=26-nums;
19 sum+=nums;
20 }
21
22 cout<<sum<<endl;
23 return 0;
24 } /*
25 a--z 1
26 z--e 5
27 e--u 10
28 u s 2
29 */