Descripción Asunto:
Hay un anillo, extremo conectado al extremo por las letras de la composición alfabeto. Un puntero anillo inicialmente apunta a una. Cada vez que una rejilla gira en sentido horario o antihorario. Por ejemplo: a las agujas del reloj a B, en sentido antihorario para z. Ahora hay una cadena de caracteres, necesita encontrar cuántas veces se puede convertir punto puntero a una cadena de letras.
Formatos de entrada:
Introduzca sólo una línea, que es una cadena.
Ejemplo de entrada:
zeus
Los formatos de salida:
Al menos al número de revoluciones de salida.
Salida de muestra:
18
ideas:
Para realizar el número mínimo de revoluciones, es decir, cada vez que el número de revoluciones de las células llegar a la siguiente letra sea mínima. Por lo tanto, para considerar cada rotación es hacia la derecha o giro a la izquierda puede girar relativamente pequeño número de células.
Conjunto puntero está apuntando a las letras como antes, para llegar a la siguiente letra es el siguiente.
Si la siguiente lexicográficamente más grande que antes, cuando la red del número de revoluciones en sentido horario-siguiente, antes de (en este caso, un ASCII sustracción); si el número de células es en sentido antihorario girada 26-1 + antes-siguiente;
si lexicográficamente siguiente más pequeño que antes, Si la rotación en sentido horario del número de células 26-1 + próxima antes; si el número de células es en sentido antihorario girada antes-próximo;
mediante el estudio de la fórmula anterior y la operación de valor absoluto, una parte de la caja se puede combinar.
código:
#include <iostream>
#include <string>
#include<cmath>
using namespace std;
int main(int argc, char** argv) {
string str;
int temp=0,count=0,c[3];
cin>>str;
for(int i=0;i<str.size();i++)
{
int a=str[i]-'a';
c[0]=abs(a-temp);
c[1]=abs(26+a-temp);
c[2]=abs(26-a+temp);
int min=0;
for(int i=1;i<3;i++)
if(c[i]<c[min])
min=i;
count+=c[min];
temp=a;
}
cout<<count<<endl;
return 0;
}