题目描述:
咕咕东是个贪玩的孩子,有一天,他从上古遗迹中得到了一个神奇的圆环。这个圆环由字母表组成首尾相接的环,环上有一个指针,最初指向字母a。咕咕东每次可以顺时针或者逆时针旋转一格。例如,a顺时针旋转到z,逆时针旋转到b。咕咕东手里有一个字符串,但是他太笨了,所以他来请求你的帮助,问最少需要转多少次才能得到这个字符串
思路:
从一个数转到另一个数可以顺时针转x次,或逆时针转y次,则x ≡ y(mod 26),取x,y中绝对值小的那个,如此重复即可
总结:
注意问题抽象即可,抽象到越简单的层面越好
代码:
1 #include <cstdio> 2 #include <iostream> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6 //没有必要存储字母 7 int point=0,ans=0,now; 8 char t[10005]; 9 int main() 10 { 11 //模26同余的两个数的绝对值的最小 12 scanf("%s",t); 13 int len=strlen(t); 14 for(int i=0;i<len;i++) 15 { 16 now=t[i]-'a'; 17 int t1=abs(now-point); 18 int t2=abs(26-t1); 19 ans+=min(t1,t2); 20 point=now; 21 } 22 cout<<ans<<endl; 23 }