题意:
字母a-z首尾相接成环,开始时指针指向a,圆环可以顺时针或者逆时针旋转,给定一个字符串,计算旋转依次得到该字符串的每一个字符最少需要转多少格。
Input:
一个字符串 长度<=10000
Output:
最少转动的次数
题目分析:
关键在于求两个字符之间的顺时针距离和逆时针距离,然后取最小值即可。两个字符之间的距离可以由两个字符对应的ASCII码做模26的减法得到。
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int min(int a,int b){
return a<b ? a:b;
}
char ch[10001];
int main()
{
scanf("%s",ch);
int len=strlen(ch);
int cnt=0;
int temp1=(ch[0]+26-'a')%26;
int temp2=('a'+26-ch[0])%26;
int temp=min(temp1,temp2);
cnt+=temp;
for(int i=1;i<len;i++){
temp1=(ch[i]+26-ch[i-1])%26;
temp2=(ch[i-1]+26-ch[i])%26;
temp=min(temp1,temp2);
cnt+=temp;
}
cout<<cnt<<endl;
return 0;
}
样例输入:
zeus
样例输出:
18