//这题不难,甚至可以称水题中的水题了,可我居然在这道题上,也不是一气呵成地完成,说明基础还是不够扎实,思维也不灵活 #include <bits/stdc++.h> using namespace std; const int N = 105; char word[N]; int getdistance (char a, char b) { if (a < b) swap(a, b); int len1 = (abs)((int)a - (int)b); // int len2 = (abs) ('z' - (int)a + (int)b - 'a' + 1); int len2 = 26 - a + b; return min(len1, len2); } int main() { while (cin >> word) { int ans = 0; ans += getdistance(word[0], 'a'); int len = strlen(word); for (int i = 1; i < len; i++) ans += getdistance(word[i - 1], word[i]); cout << ans << endl; } return 0; }
//这种方法的思路比较清晰,值得借鉴 #include <bits/stdc++.h> using namespace std; const int N = 105; char word[N]; int main() { while (cin >> word) { int ans = 0; char now = 'a'; int len = strlen(word); for (int i = 0; i < len; i++) { ans += min( abs(word[i] - now), min(26 + word[i] - now, 26 + now - word[i] ) ); now = word[i]; } cout << ans << endl; } return 0; }