题意:
一个圆环包含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 */