Week4 CSP-M1 A

题目描述:

咕咕东是个贪玩的孩子,有一天,他从上古遗迹中得到了一个神奇的圆环。这个圆环由字母表组成首尾相接的环,环上有一个指针,最初指向字母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 }
原文地址:https://www.cnblogs.com/qingoba/p/12511073.html